这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述
Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求,JSON判断登录是否成功
Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告
Python自动化测试实战篇(3)优化unittest批量自动化接口测试代码,ddt驱动+yaml实现用例调用,输出HTMLTestRunner测试报告
Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试,Assert捕获断言多种断言
Python自动化测试实战篇(5)优化selenium+unittest+ddt,搞定100条测试用例只执行前50条
Python自动化测试实战篇(7),初识pytest做一个简单的接口测试,allure输出可视化测试报告
1.pytest和unittest区别
2.pytest介绍与安装
pytest是一个非常好用的而且成熟的python测试框架
- 简单上手,灵活方便
- 支持appium和selenium等自动化测试和接口自动化测试
- pytest也有很多插件可以使用
pip3 install pytest
pip3 install sugar
pip3 install pytest-rerunfailures
pip3 install pytest-xdist
pip3 install pytest-assume
pip3 install pytest-html
pip3 install request
3.apifox中mock模拟生成测试接口
由于我的postman不知道为什么崩溃掉了,新增了环境变量和修改删除了一些东西以后都还是无法使用,于是我就换成了apifox来模拟接口
4.编写测试脚本
pytest的命名规则
-
测试模块名用test_开头或_tsest结尾
-
测试类必须以test开头或结尾
-
测试函数必须以test开头或结尾
import pytest
class Test_Pytest():
def test_one(self):
print("测试方法1执行" )
assert 2==2
def test_two(self):
print("测试方法2执行" )
def test_three(self):
print("测试方法3方法执行" )
if __name__=="__main__":
pytest.main(['testpy.py'])
5.pytest+request做接口测试
做request接口测试之前我们需要了解
1.request的功能主要分为下面几种
- 封装了请求头数据
- 封装了请求正文数据,如果是GET请求没有正文
- request是一个域对象,可以把它当成MAP来添加获取数据
- request提供了请求转发和请求包含功能
2.headers请求头的相关方法
- String getHeader(string name):获取指定名称的请求头
- Enumeration getHeaderNames():获取所有请求头名称:
- int getintHeader(String name):获取值为int类型的请求头
3.request常用9种请求
- Get方法请求一个指定资源的表示形式
- Post方法用于将实体提交到指定的资源
- Head方法请求与Get方法类似,但没有请求体
- Put方法用于请求有效载荷替换目标资源的所有
- Delete方法删除指定的资源
- Connect方法建立一个到目标资源标识的服务器隧道
- Options用于描述目标资源的通信
- Trace方法沿着到目标资源的路径执行一个消息环回测试
- Patch方法用于对资源应用部分修改
4.request.data
主要用于请求中的数据部分,如发送一段需要请求的body信息,然后返回数据,如下图所示
import pytest
import requests
import allure
class Test_Pytest():
def test_one(self):
url = 'http://127.0.0.1:4523/m1/2459729-0-default/happyshop/login'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'msg': 'admin', 'code': '','result':''}
reps = requests.post(url=url, headers=headers, data=data)
print(reps.text)
assert True
def test_two(self):
url = 'http://127.0.0.1:4523/m1/2459729-0-default/happyshop/login?apifoxResponseId=175999630'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'msg': 'admin', 'code': '', 'result': ''}
reps = requests.post(url=url, headers=headers, data=data)
print(reps.text)
def test_three(self):
print("测试方法3方法执行" )
assert False
if __name__=="__main__":
pytest.main(['testpy.py','--alluredir', './report/xml'])
5.allure输出可视化测试报告
为allure做准备
在最尾部的时候要打印出report信息才能被allure识别出来
if __name__=="__main__":
pytest.main(['testpy.py','--alluredir', './report/xml'])
allure的安装和配置看下面这篇文章
allure安装
安装完成后最后执行这个下面的代码直接生成测试报告
os.system(‘allure serve ./report/xml’)
完整代码
import os
import pytest
import requests
import allure
class Test_Pytest():
def test_one(self):
url = 'http://127.0.0.1:4523/m1/2459729-0-default/happyshop/login'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'msg': 'admin', 'code': '','result':''}
reps = requests.post(url=url, headers=headers, data=data)
print(reps.text)
assert True
def test_two(self):
url = 'http://127.0.0.1:4523/m1/2459729-0-default/happyshop/login?apifoxResponseId=175999630'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'msg': 'admin', 'code': '', 'result': ''}
reps = requests.post(url=url, headers=headers, data=data)
print(reps.text)
def test_three(self):
print("测试方法3方法执行" )
assert False
if __name__=="__main__":
pytest.main(['testpy.py','--alluredir', './report/xml'])
os.system('allure serve ./report/xml')
6.关于allure中切换中文的方法
7.通过测试套查看测试用例的情况
查看失败的方法,一般来说需要增加断言进行捕获才能清楚认知到具体错误的原因,单从响应返回json来看的话只能看到接口是不是通的情况。