pytest接口自动化测试框架 项目实例,python测试框架pytest
本文主要介绍python pytest自动测试功能的封装测试类的测试方法。文章围绕主题,详细介绍了内容,有一定的参考价值,有需要的朋友可以参考一下。
00-1010前言一、测试用例封装的一般规则三、测试类/方法的封装四、样本代码总结
目录
今天,我想和你谈谈python pytest接口自动化中代码的封装。只有封装测试代码,它才能被测试框架识别和执行。
例如单个接口的请求代码如下:
导入请求
标题={
用户代理“:”Mozilla/5.0(Windows NT 10.0;Win64x64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/99 . 0 . 4844 . 51 Safari/537.36
}
URL= https://MP . toutiao.com/profile _ v4/
res=requests.get(url=h_url,headers=headers)
假设我们需要将上面的代码编写成一个测试框架可以执行的测试用例。仅仅像这样编写代码显然是不够的,我们需要添加以下内容:
需要将代码封装成unittest框架(pytest或unittest)能够识别的测试函数或测试类,否则无法识别和执行。需要断言,也就是结果和期望的比较,这样单元测试框架才能确定用例的执行结果是否通过。如果结果==期望,则表示通过,否则失败。
这里不解释python中函数和类的封装。这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码.
前言
测试用例的封装有两种,测试函数和测试类,封装的一般规则如下:
一个测试函数对应一个测试用例。一个测试类中可以定义多个测试方法,一个测试方法对应一个测试用例,一个测试类可以看作一组测试用例。py中测试函数或测试方法的名称必须以test开头,test的类名必须以Test开头。具体命名规则请参考我之前的文章pytest(3)——测试命名规则。对于单接口测试验证,一个单接口测试用例只包含一个接口请求,即一个接口请求被封装到一个测试函数或测试方法中。对于场景(多接口)测试验证,一个场景测试用例需要请求多个接口,因此多个接口请求需要封装在同一个测试函数或方法中。一般来说,一个接口的转发检查和异常检查封装在不同的方法中,封装在同一个测试类中。例如,如果定义了一个登录测试类,正确的用户名和密码请求被封装到一个方法中(即一个测试用例),而正确的用户名和错误的密码请求被封装到另一个方法中(即另一个测试用例)。您还可以将与某个功能点或功能相关联的接口用例封装在同一个测试类中。例如,个人中心涉及的接口可以封装在同一个测试类中。第二,测试功能的封装。
一般而言,一个测试函数对应一条用例。上面的代码编写成一条测试用例,示例如下:
强调一下pytest中测试函数的名字必须以test开头,比如test_get_home。
一、测试用例封装的一般规则
一个测试类相当于一组测试用例,类中的每个方法对应一个测试用例。以登录接口为例,封装成一个测试类。示例如下:
强调pytest中测试类的名称需要以Test开头,比如TestLogin,测试类中不能有init方法。类中的测试方法必须以Test开头,例如test_login_normal。
三、测试类/方法的封装
您可以使用命令行或代码模式pytest.main()来执行pytest中的用例。详情请参考pytest(1)-简介一文。
完整的示例代码如下:
导入请求
导入pytest
导入json
def test_get_home():
请求主页界面
:返回:
标题={
用户代理 : 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(url=url, headers=headers)
# 断言,判断返回结果的code是否等于200,当然实际接口测试中一般返回结果中还会有别的字段需要断言
assert res.status_code == 200
class TestLogin:
登录接口校验
url = "http://127.0.0.1:5000/login"
headers = {"Content-Type": "application/json;charset=utf8"}
def test_login_normal(self):
正确用户名、正确密码登录
data = {
"username": "AndyLiu",
"password": "123456"
}
res = requests.post(url=self.url, json=data, headers=self.headers)
# 断言
assert res.status_code == 200
assert json.loads(res.text)["token"]
def test_login_error(self):
正确用户名、错误密码登录
data = {
"username": "AndyLiu",
"password": "111111"
}
res = requests.post(url=self.url, json=data, headers=self.headers)
# 断言
assert res.status_code == 200
assert not json.loads(res.text)["token"]
if __name__ == __main__:
pytest.main()
总结
测试函数、测试类/测试方法的封装,其实不管是什么单元测试框架,遵循的方式都一样。
而在命名方式上各有自己的要求,比如pytest与unittest中测试命名方法有一定的区别。
把一个有自己断言的函数或方法看成是一条测试用例,那么测试类其实就是一个含有一条或者多条测试用例的测试用例集,类中的每个方法对应一条测试用例。
一个测试类中放置哪些测试方法,换句话说一个测试用例集中应该包含哪些测试用例,这个可以按照项目自身情况而定,也可按照测试人员自己的想法而定,主旨就是要清晰明了
到此这篇关于python+pytest自动化测试函数测试类测试方法的封装的文章就介绍到这了,更多相关python测试函数内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。