当前位置: 首页 > news >正文

企业营销网站服装设计手稿

企业营销网站,服装设计手稿,没有网站可以做seo,seo工作是什么意思目录 前言 http包的HandleFunc函数 http.Request/http.ResponseWriter httptest 定义被测接口 测试代码 测试执行 总结 资料获取方法 前言 Mock是一个做自动化测试永远绕不过去的话题。本文主要介绍使用标准库net/http/httptest完成HTTP请求的Mock的测试方法。 可能有…目录 前言 http包的HandleFunc函数 http.Request/http.ResponseWriter httptest 定义被测接口 测试代码 测试执行 总结 资料获取方法 前言 Mock是一个做自动化测试永远绕不过去的话题。本文主要介绍使用标准库net/http/httptest完成HTTP请求的Mock的测试方法。 可能有的小伙伴不太了解mock在实际自动化测试过程中的意义在我的另外一篇博客中有比较详细的描述在本文中我们可以简单理解为它可以解决测试依赖。下面我们一起来学习它。 http包的HandleFunc函数 我们在前面的文章中介绍过怎么发送各种http请求但是没有介绍过怎么使用golang启动一个http的服务。我们首先来看看怎么使用golang建立一个服务。 使用golang启动一个http服务非常简单把下面的代码保存在httpServerDemo.go中执行命令go run httpServerDemo.go就完成建立了一个监听在http://127.0.0.1:9090/上的服务。 package mainimport (fmtlognet/http )func httpServerDemo(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, {name:Bingo,age:18}) }func main() {http.HandleFunc(/, httpServerDemo)err : http.ListenAndServe(:9090, nil)if err ! nil {log.Fatal(ListenAndServe: , err)} }访问http://127.0.0.1:9090/可以看到下面的内容。 介绍如何建立一个服务是因为我们要学习建立服务需要使用到的两个结构体http.Request/http.ResponseWriter。下面我们一起来看看他们的具体内容。 http.Request/http.ResponseWriter type Request struct {Method stringURL *url.URLProto stringProtoMajor intProtoMinor intHeader HeaderBody io.ReadCloserGetBody func() (io.ReadCloser, error)ContentLength int64TransferEncoding []stringClose bool ...type ResponseWriter interface {Header() HeaderWrite([]byte) (int, error)WriteHeader(int) }从上面的定义可以看到两个结构体具体的参数和方法定义。下面我们一起来学习net/http/httptest。 httptest 假设现在有这么一个场景我们现在有一个功能需要调用免费天气API来获取天气信息但是这几天该API升级改造暂时不提供联调服务而Boss希望该服务恢复后我们的新功能能直接上线我们要怎么在服务不可用的时候完成相关的测试呢答案就是使用Mock。 net/http/httptest就是原生库里面提供Mock服务的包使用它不用真正的启动一个http server亦或者请求任意的server而且创建方法非常简单。下面我们一起来看看怎么使用它吧。 定义被测接口 将下面的内容保存到weather.go中 package weatherimport (encoding/jsonfmtio/ioutilnet/http )const (ADDRESS shenzhen )type Weather struct {City string json:cityDate string json:dateTemP string json:temPWeather string json:weather }func GetWeatherInfo(api string) ([]Weather, error) {url : fmt.Sprintf(%s/weather?city%s, api, ADDRESS)resp, err : http.Get(url)if err ! nil {return []Weather{}, err}if resp.StatusCode ! http.StatusOK {return []Weather{}, fmt.Errorf(Resp is didnt 200 OK:%s, resp.Status)}bodybytes, _ : ioutil.ReadAll(resp.Body)personList : make([]Weather, 0)err json.Unmarshal(bodybytes, personList)if err ! nil {fmt.Errorf(Decode data fail)return []Weather{}, fmt.Errorf(Decode data fail)}return personList, nil }根据我们前面的场景设定GetWeatherInfo依赖接口是不可用的所以resp, err : http.Get(url)这一行的err肯定不为nil。为了不影响天气服务恢复后我们的功能能直接上线我们在不动源码从单元测试用例入手来完成测试。 测试代码 将下面的内容保存到weather_test.go中 package weatherimport (encoding/jsonfmtnet/httpnet/http/httptesttesting )var weatherResp []Weather{{City: shenzhen,Date: 10-22,TemP: 15℃~21℃,Weather: rain,},{City: guangzhou,Date: 10-22,TemP: 15℃~21℃,Weather: sunny,},{City: beijing,Date: 10-22,TemP: 1℃~11℃,Weather: snow,}, } var weatherRespBytes, _ json.Marshal(weatherResp)func TestGetInfoUnauthorized(t *testing.T) {ts : httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {w.WriteHeader(http.StatusUnauthorized)w.Write(weatherRespBytes)if r.Method ! GET {t.Errorf(Except Get got %s, r.Method)}if r.URL.EscapedPath() ! /weather {t.Errorf(Except to path /person,got %s, r.URL.EscapedPath())}r.ParseForm()topic : r.Form.Get(city)if topic ! shenzhen {t.Errorf(Except rquest to have cityshenzhen,got %s, topic)}}))defer ts.Close()api : ts.URLfmt.Printf(Url:%s\n, api)resp, err : GetWeatherInfo(api)if err ! nil {t.Errorf(ERR:, err)} else {fmt.Println(resp:, resp)} }func TestGetInfoOK(t *testing.T) {ts : httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {w.WriteHeader(http.StatusOK)w.Write(weatherRespBytes)if r.Method ! GET {t.Errorf(Except Get got %s, r.Method)}if r.URL.EscapedPath() ! /weather {t.Errorf(Except to path /person,got %s, r.URL.EscapedPath())}r.ParseForm()topic : r.Form.Get(city)if topic ! shenzhen {t.Errorf(Except rquest to have cityshenzhen,got %s, topic)}}))defer ts.Close()api : ts.URLfmt.Printf(Url:%s\n, api)resp, err : GetWeatherInfo(api)if err ! nil {fmt.Println(ERR:, err)} else {fmt.Println(resp:, resp)} }简单解释一下上面的部分代码 我们通过httptest.NewServer创建了一个测试的http server通过变量r *http.Request读请求设置通过w http.ResponseWriter设置返回值通过ts.URL来获取请求的URL一般都是http://ip:port也就是实际的请求url通过r.Method来获取请求的方法来测试判断我们的请求方法是否正确获取请求路径r.URL.EscapedPath()本例中的请求路径就是/weather获取请求参数r.ParseFormr.Form.Get(city)设置返回的状态码w.WriteHeader(http.StatusOK)设置返回的内容也就是我们想要的结果w.Write(personResponseBytes)注意w.Write()接收的参数是[]byte所以通过json.Marshal(personResponse)转换。 当然我们也可以设置其他参数的值也就是我们在最前面介绍的http.Request/http.ResponseWriter这两个结构体的内容。 测试执行 在终端中进入我们保存上面两个文件的目录执行go test -v就可以看到下面的测试结果 bingoMac httptest$ go test -vRUN TestGetInfoUnauthorized Url:http://127.0.0.1:55816 --- FAIL: TestGetInfoUnauthorized (0.00s)person_test.go:55: ERR:%!(EXTRA *errors.errorStringResp is didnt 200 OK:401 Unauthorized)RUN TestGetInfoOK Url:http://127.0.0.1:55818 resp: [{shenzhen 10-22 15℃~21℃ rain} {guangzhou 10-22 15℃~21℃ sunny} {beijing 10-22 1℃~11℃ snow}] --- PASS: TestGetInfoOK (0.00s) FAIL exit status 1 FAIL bingo.com/blogs/httptest 0.016s可以看到两条测试用例成功了一条失败了一条失败的原因就是我们设置的接口响应码为401(w.WriteHeader(http.StatusUnauthorized))这个可能会在调用其他服务时遇到所以有必要进行测试。更多的响应码我们可以在我们的golang安装目录下找到比如博主的路径是 /usr/local/go/src/net/http/status.go这个文件中定义了几乎所有的http响应码 StatusContinue 100 // RFC 7231, 6.2.1StatusSwitchingProtocols 101 // RFC 7231, 6.2.2StatusProcessing 102 // RFC 2518, 10.1StatusOK 200 // RFC 7231, 6.3.1StatusCreated 201 // RFC 7231, 6.3.2StatusAccepted 202 // RFC 7231, 6.3.3StatusNonAuthoritativeInfo 203 // RFC 7231, 6.3.4StatusNoContent 204 // RFC 7231, 6.3.5StatusResetContent 205 // RFC 7231, 6.3.6...综上我们可以通过不发送httptest来模拟出httpserver和返回值来进行自己代码的测试上面写的两条用例只是抛砖引玉大家可以根据实际业务使用更多的场景来进行Mock。 总结 httptestHandleFunc结构体http.Request/http.ResponseWriterhttp 响应码 资料获取方法 【留言777】 各位想获取源码等教程资料的朋友请点赞 评论 收藏三连 三连之后我会在评论区挨个私信发给你们~
http://www.dnsts.com.cn/news/249863.html

相关文章:

  • 全校网站建设与管理网站建设zgkr
  • 电子商务网站建设与维护课程总结wordpress固定连接nginx
  • 如何看到网站做哪些关键字广西柳州网站制作公司
  • 用什么工具做网站视图qq音乐如何做mp3下载网站
  • 群晖个人网站建设最好的购物网站排名
  • 兰州网站关键词优化在国外做购物网站
  • 营销型网站建设哪好定做app需要多少钱
  • 重庆专门做网站的公司泰格豪雅手表官方网站
  • 上海做展会的网站都有哪些中国建设银行官方网站 认证
  • 诚信网站认证必需做吗昆山规模的网站建设公司有哪些
  • 广州微网站建设平台企业邮箱忘记密码怎么找回
  • 上海网站建设最好的公司高校门户网站系统
  • 写作网站云简洁印象wordpress企业主题
  • 阿里云快速做网站百度投诉中心24人工
  • 怎么把网站排名到百度前三名爱站工具的功能
  • 安阳哪有做网站的网站页面优化工具
  • 网站建设用阿里云的虚拟主机网站设计机构图
  • 中国建设银行个人卡信息网站凡科网站为什么免费做网站
  • seo网络营销招聘苏州网站优化建设
  • 建设通网站是什么性质如何推广自己网站
  • 深圳 营销型网站建设淘宝做导航网站
  • 网站建设毕业设计心得如何关闭网站
  • 昆明做网站推wordpress添加下载按钮
  • 电子商务的网站开发的工作内容杭州平面设计公司
  • 学生做义工网站京伦网站建设
  • 鄂州网站网站建设wordpress千万数据
  • 哈尔滨专业网站制作公司软件开发项目管理软件哪个好
  • 模板网站源码电子商务网站建设与管理 技能实训
  • 在中国做采购在哪个网站找产品出名的网站建设软件
  • wordpress rest json优化设计六年级下册语文答案