Python自动化测试实战篇(7),初识pytest做一个简单的接口测试,allure输出可视化测试报告

在这里插入图片描述
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述
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条

在这里插入图片描述

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来看的话只能看到接口是不是通的情况。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻烟飘荡

我想吃甜筒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值