专业建站策划,云南最便宜的网站建设,网站长期建设 运营计划,百度网站提交了多久收录前言
在pythonpytest 接口自动化系列中#xff0c;我之前的文章基本都没有将代码进行封装#xff0c;但实际编写自动化测试脚本中#xff0c;我们都需要将测试代码进行封装#xff0c;才能被测试框架识别执行。
例如单个接口的请求代码如下#xff1a;
import requests…前言
在pythonpytest 接口自动化系列中我之前的文章基本都没有将代码进行封装但实际编写自动化测试脚本中我们都需要将测试代码进行封装才能被测试框架识别执行。
例如单个接口的请求代码如下
import requestsheaders {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
}url https://www.cnblogs.com/lfr0123/
res requests.get(urlh_url, headersheaders)
假设我们需要将上面这段代码编写成测试框架能执行的测试用例仅仅只是这样写代码显然是不够的还需要进行如下补充
需要将代码封装成单元测试框架 (pytest或unittest) 能识别的测试函数或测试类否则将不会被识别执行。需要加上断言即结果与期望之间的对比单元测试框架才能判定该用例执行结果是否通过结果期望则说明通过否则失败。
python中函数以及类的封装这里不做过多说明pytest断言大家可以参考文章pytest(5)-断言而这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码。
测试用例封装的一般规则
测试用例的封装有两种测试函数和测试类封装的一般规则如下
一个测试函数对应一条测试用例。测试类中可定义多个测试方法一个测试方法对应一条测试用例测试类可以看作是一个测试用例集。pytest中测试函数或测试方法的命名必须以test开头测试类名必须以Test开头。具体命名规则可以参考我之前的文章pytest(3)-测试命名规则。对于单接口的测试校验一个单接口的测试用例只包含一个接口请求即将一个接口请求封装成一个测试函数或测试方法。对于场景(多接口) 的测试校验一条场景测试用例需请求多个接口因此需要将多个接口请求封装在同一个测试函数或方法中。一般封装一个接口的正向校验、异常校验封装成不同的方法并封装在同一个测试类中。如定义一个登陆的测试类正确用户名、密码请求封装成一个方法 (即一条测试用例)正确用户名、错误密码请求封装成另一个方法 (即另一条测试用例)。也可以将某个功能点或功能相关联的接口用例封装在同一个测试类中。比如个人中心涉及到的接口可以封装在同一个测试类中 测试函数的封装
一般而言一个测试函数对应一条用例。上面的代码编写成一条测试用例示例如下 强调pytest中测试函数命名必须以test开头如test_get_home。
测试类/方法的封装
一个测试类相当于一个测试用例集类中的每个方法对应一条测试用例。以登录接口为例封装成测试类示例如下 强调pytest中测试类命名需要以Test开头如TestLogin且测试类中不能有init方法。测试类中测试方法必须以test开头如test_login_normal。
示例代码
pytest中可以使用命令行或者使用代码方式即 pytest.main() 执行用例。
完整的示例代码如下 import requests
import pytest
import jsondef test_get_home():请求首页接口:return:headers {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36}url https://www.cnblogs.com/lfr0123/res requests.get(urlurl, headersheaders)# 断言判断返回结果的code是否等于200当然实际接口测试中一般返回结果中还会有别的字段需要断言assert res.status_code 200class TestLogin:登录接口校验url http://127.0.0.1:5000/loginheaders {Content-Type: application/json;charsetutf8}def test_login_normal(self):正确用户名、正确密码登录data {username: AndyLiu,password: 123456}res requests.post(urlself.url, jsondata, headersself.headers)# 断言assert res.status_code 200assert json.loads(res.text)[token]def test_login_error(self):正确用户名、错误密码登录data {username: AndyLiu,password: 111111}res requests.post(urlself.url, jsondata, headersself.headers)# 断言assert res.status_code 200assert not json.loads(res.text)[token]if __name__ __main__:pytest.main() 小结
测试函数、测试类/测试方法的封装其实不管是什么单元测试框架遵循的方式都一样。而在命名方式上各有自己的要求比如pytest与unittest中测试命名方法有一定的区别。把一个有自己断言的函数或方法看成是一条测试用例那么测试类其实就是一个含有一条或者多条测试用例的测试用例集类中的每个方法对应一条测试用例。一个测试类中放置哪些测试方法换句话说一个测试用例集中应该包含哪些测试用例这个可以按照项目自身情况而定也可按照测试人员自己的想法而定主旨就是要清晰明了。 感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取