电商网站的模式,微信端网站页面设计,安阳市网站制作公司,网络推广的渠道经过之前的学习铺垫#xff0c;我们尝试着利用pytest框架编写一条接口自动化测试用例#xff0c;来厘清接口自动化用例编写的思路。
我们在百度搜索天气查询#xff0c;会出现如下图所示结果#xff1a; 接下来#xff0c;我们以该天气查询接口为例#xff0c;编写接口测…经过之前的学习铺垫我们尝试着利用pytest框架编写一条接口自动化测试用例来厘清接口自动化用例编写的思路。
我们在百度搜索天气查询会出现如下图所示结果 接下来我们以该天气查询接口为例编写接口测试用例脚本。
一明确测试对象
针对某个功能做接口测试首先我们需要确定实现这个功能调用的是哪个接口这个接口的具体信息如功能、协议、URL、请求方法、请求参数说明、响应参数说明等等可以通过查看开发提供的接口文档获取也可以通过抓包在没有接口文档的情况下获取。找到对应的接口也就是测试对象之后才能有目的的进行下一步。
1这里显然是没有接口文档提供接口相关的信息的我们甚至都不知道请求url那么先Fiddler抓包获取接口信息。 如果你想学习自动化测试我这边给你推荐一套视频这个视频可以说是B站播放全网第一的自动化测试教程同时在线人数到达1000人并且还有笔记可以领取及各路大神技术交流798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from333.337.search-card.all.click通过抓包我们抓取到了该接口的信息如下
请求urlhttps://weathernew.pae.baidu.com/weathernew/pc请求方式GET请求参数
2抓取到以上这些接口信息后我们先编写简单的脚本请求该接口如下
url https://weathernew.pae.baidu.com/weathernew/pc
params {query: 浙江杭州天气,srcid: 4982
}
res requests.get(urlurl, paramsparams)
print(res.status_code)
print(res.text) 运行代码接口调试通过能获取到结果如下 3明确需求确定用例。
我们在针对某个接口做自动化测试时需要先明确用例需要验证的测试点。有些接口既要进行正向的校验也要进行异常的校验而有些接口可能在自动化时只需要进行正向校验就够了无需做异常校验。
我们来分析一下示例的这个天气查询接口主要有两个测试点 正向请求输入存在的城市能查找对应城市的天气 异常请求输入不存在的城市提示错误
二编写测试用例
编写测试用例时我们需要将代码进行封装可以封装成测试类/方法、测试函数。pytest中对用例封装的命名方式有要求详细请参考我之前的文章pytest测试命名规则。
至于封装成类还是函数其实没什么特定的要求一般同一个场景或同一个测试点相关的接口可以定义成一个类。
同时用例还需要设置断言用于校验返回内容是否为期望的内容。测试用例一定要进行断言否则毫无意义。
构造请求数据
正向请求数据如下
params {query: 浙江杭州天气,srcid: 4982
} 异常请求数据如下
params {query: 微信公众号测试上分之路,srcid: 4982
}
正向请求的结果我们在上面调试请求该接口的时候已经拿到了如上面的截图。
我们来看下异常请求的结果为后续设置断言做准备结果如下 发送异常请求后返回的code也是200结果中会出现暂未开通此城市查询且没有出现正向请求中的window.tplData内容。
封装测试代码
这里是针对同一个接口的两条不同的测试用例我们直接封装一个测试类专门用于测试该接口。示例代码如下
class TestWeather:校验百度天气查询接口https://weathernew.pae.baidu.com/weathernew/pcdef test_get_weather_normal(self):正向校验-查询存在的城市的天气url https://weathernew.pae.baidu.com/weathernew/pcparams {query: 浙江杭州天气,srcid: 4982}res requests.get(urlurl, paramsparams)def test_get_weather_error(self):异常校验-查询不存在的城市的天气url https://weathernew.pae.baidu.com/weathernew/pcparams {query: 微信公众号测试上分之路,srcid: 4982}res requests.get(urlurl, paramsparams) 注意代码里还没有进行断言不能算是完整的用例。这里我只是为了说明流程而把断言放到下一步分析后再写断言。
断言设置
断言即校验结果是否是我们期望的内容。pytest怎么进行断言请参考文章pytest-断言。
设置断言时我们需要先明确校验哪些字段。一般而言接口响应的code都需要断言status_code 200则说明接口请求通了。然后再去断言其他必要字段从而校验接口功能是否实现。
由上面的结果可知正向请求可以进行如下断言
# 断言code是否等于200存在则该断言通过
assert res.status_code 200# 断言结果中是否存在window.tplData存在则该断言通过
assert window.tplData in res.text
由上面的结果可知异常请求可以进行如下断言
# 断言code是否等于200存在则该断言通过
assert res.status_code 200# 断言结果中是否存在window.tplData注意这里是不存在则该断言通过
assert window.tplData not in res.text# 断言结果中是否存在暂未开通此城市查询存在则该断言通过
assert 暂未开通此城市查询 in res.text
三执行脚本获取测试结果
使用pytest框架管理执行用例时需要先安装pytest并在模块中import不清楚的同学可以查看我的pytest系列文章这里不做过多说明。
完整示例代码如下
# time: 2022-03-20
# author: 给你一页白纸import requests
import pytestclass TestWeather:校验百度天气查询接口https://weathernew.pae.baidu.com/weathernew/pcdef test_get_weather_normal(self):正向校验-查询存在的城市的天气url https://weathernew.pae.baidu.com/weathernew/pcparams {query: 浙江杭州天气,srcid: 4982}res requests.get(urlurl, paramsparams)# print(res.status_code)# print(res.text)assert res.status_code 200assert window.tplData in res.textdef test_get_weather_error(self):异常校验-查询不存在的城市的天气url https://weathernew.pae.baidu.com/weathernew/pcparams {query: 微信公众号测试上分之路,srcid: 4982}res requests.get(urlurl, paramsparams)print(res.status_code)print(res.text)assert res.status_code 200assert window.tplData not in res.textassert 暂未开通此城市查询 in res.textif __name__ __main__:# 使用pytest执行用例pytest.main()
当然这里因为url是共用的我们最好是将它提取出来而不是每个测试方法都去定义一次这个变量如下图所示 执行结果如下 四总结
单个接口自动化测试用例我们可以按照上面的步骤来进行即 明确测试对象--编写测试用例--编写测试脚本--执行脚本、获取测试结果。通过这些步骤我们便对自动化用例的编写有了基本的思路这一点对于我们自动化测试思维的形成很重要为我们后续的学习实践打下基础。
事实上使用编程语言对项目进行自动化测试时几乎不可能只存在一条测试用例那么在有多条测试用例的情况下需要怎样管理用例、执行用例、获取测试结果这就是单元测试框架需要解决的问题。