python+pytest接口自动化(10)-自动化用例编写思路 (使用pytest编写一个测试脚本)
Posted 一个处女座的测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+pytest接口自动化(10)-自动化用例编写思路 (使用pytest编写一个测试脚本)相关的知识,希望对你有一定的参考价值。
经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。
我们在百度搜索天气查询,会出现如下图所示结果:
接下来,我们以该天气查询接口为例,编写接口测试用例脚本。
一,明确测试对象
针对某个功能做接口测试,首先我们需要确定实现这个功能调用的是哪个接口,这个接口的具体信息(如功能、协议、URL、请求方法、请求参数说明、响应参数说明等等)可以通过查看开发提供的接口文档获取,也可以通过抓包(在没有接口文档的情况下)获取。找到对应的接口也就是测试对象之后,才能有目的的进行下一步。
1,这里显然是没有接口文档提供接口相关的信息的,我们甚至都不知道请求url,那么先Fiddler抓包获取接口信息。
通过抓包我们抓取到了该接口的信息如下:
请求url:https://weathernew.pae.baidu.com/weathernew/pc
请求方式:GET
请求参数:
2,抓取到以上这些接口信息后,我们先编写简单的脚本请求该接口,如下:
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params =
"query": "浙江杭州天气",
"srcid": 4982
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)
运行代码,接口调试通过,能获取到结果,如下:
3,明确需求,确定用例。
我们在针对某个接口做自动化测试时,需要先明确用例需要验证的测试点。有些接口既要进行正向的校验,也要进行异常的校验,而有些接口可能在自动化时只需要进行正向校验就够了,无需做异常校验。
我们来分析一下示例的这个天气查询接口,主要有两个测试点:
正向请求:输入存在的城市,能查找对应城市的天气
异常请求:输入不存在的城市,提示错误
二,编写测试用例
编写测试用例时,我们需要将代码进行封装,可以封装成测试类/方法、测试函数。pytest中对用例封装的命名方式有要求,详细请参考我之前的文章pytest测试命名规则。
至于封装成类还是函数,其实没什么特定的要求,一般同一个场景或同一个测试点相关的接口可以定义成一个类。
同时用例还需要设置断言,用于校验返回内容是否为期望的内容。测试用例一定要进行断言,否则毫无意义。
构造请求数据
正向请求,数据如下:
params =
"query": "浙江杭州天气",
"srcid": 4982
异常请求,数据如下:
params =
"query": "微信公众号:测试上分之路",
"srcid": 4982
正向请求的结果我们在上面调试请求该接口的时候已经拿到了,如上面的截图。
我们来看下异常请求的结果,为后续设置断言做准备,结果如下:
发送异常请求后,返回的code也是200,结果中会出现暂未开通此城市查询,且没有出现正向请求中的window.tplData内容。
封装测试代码
这里是针对同一个接口的两条不同的测试用例,我们直接封装一个测试类,专门用于测试该接口。示例代码如下:
classTestWeather:
'''
校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
'''deftest_get_weather_normal(self):
'''正向校验-查询存在的城市的天气'''
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params =
"query": "浙江杭州天气",
"srcid": 4982
res = requests.get(url=url, params=params)
deftest_get_weather_error(self):
'''异常校验-查询不存在的城市的天气'''
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params =
"query": "微信公众号:测试上分之路",
"srcid": 4982
res = requests.get(url=url, params=params)
注意,代码里还没有进行断言,不能算是完整的用例。这里我只是为了说明流程而把断言放到下一步,分析后再写断言。
断言设置
断言,即校验结果是否是我们期望的内容。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"notin res.text
# 断言结果中是否存在"暂未开通此城市查询",存在则该断言通过assert"暂未开通此城市查询"in res.text
三,执行脚本获取测试结果
使用pytest框架管理执行用例时,需要先安装pytest,并在模块中import,不清楚的同学可以查看我的pytest系列文章,这里不做过多说明。
完整示例代码如下:
# @time: 2022-03-20# @author: 给你一页白纸# 微信公众号:测试上分之路import requests
import pytest
classTestWeather:
'''
校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
'''deftest_get_weather_normal(self):
'''正向校验-查询存在的城市的天气'''
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params =
"query": "浙江杭州天气",
"srcid": 4982
res = requests.get(url=url, params=params)
# print(res.status_code)# print(res.text)assert res.status_code == 200assert"window.tplData"in res.text
deftest_get_weather_error(self):
'''异常校验-查询不存在的城市的天气'''
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params =
"query": "微信公众号:测试上分之路",
"srcid": 4982
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)
assert res.status_code == 200assert"window.tplData"notin res.text
assert"暂未开通此城市查询"in res.text
if __name__ == '__main__':
# 使用pytest执行用例
pytest.main()
当然,这里因为url是共用的,我们最好是将它提取出来,而不是每个测试方法都去定义一次这个变量,如下图所示:
执行结果如下:
四,总结
单个接口自动化测试用例,我们可以按照上面的步骤来进行,即 明确测试对象-->编写测试用例-->编写测试脚本-->执行脚本、获取测试结果。通过这些步骤,我们便对自动化用例的编写有了基本的思路(这一点对于我们自动化测试思维的形成很重要),为我们后续的学习实践打下基础。
事实上使用编程语言对项目进行自动化测试时,几乎不可能只存在一条测试用例,那么在有多条测试用例的情况下,需要怎样管理用例、执行用例、获取测试结果?这就是单元测试框架需要解决的问题。
这里我们使用的是pytest,关于pytest的使用可以查看pytest系列文章。
实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
电商项目实战
web测试项目
web+App+h5+小程序 测试项目
接口自动化测试实战项目
Linux实战项目
面试资料
我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取。
总结
我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。
凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!!
以上是关于python+pytest接口自动化(10)-自动化用例编写思路 (使用pytest编写一个测试脚本)的主要内容,如果未能解决你的问题,请参考以下文章
Python接口自动化测试之pytest与unittest区别
Python接口自动化测试之pytest与unittest区别
python(pytest)+allure+jenkins 实现接口自动化的思路