Pytest 实战GOGO

一. @pytest.mark. parametrize() 基本用法
示例1:

import pytest
class TestApi():
    @pytest.mark.parametrize('args',['111','222','333'])
    def test_api_01(self,args):
        print(args)
if __name__ == '__main__':
    pytest.main()

示例2:

import pytest
class TestApi():
    @pytest.mark.parametrize('name,age',[['张三','18'],['李四','19'],['王五','21']])
    def test_api_01(self,name,age):
        print(name,age)
if __name__ == '__main__':
    pytest.main()

二. YAML文件详解–实现接口自动化
1.用于全局的配置文件 ini/yami
2.用于写测试用例(接口测试用例居多)
yaml是一种数据格式,支持注释、换行、多行字符串、裸字符串(整形、字符串)
语法规则:
1.区分大小写
2.不能使用Tab缩进,只能用空格
3.注释为#
数据组成:
1.Map对象,键值对(键+:+空格+值)
2. - 表示数组

- test:
   - one: 1
   - two: 2

@pytest.mark.parametrize(args_name,args_value)

args_name:参数名称
args_value:参数的值

三.废话少说,实战练习下
1.创建文件夹【Testcase】,然后创建【test_api.py】。
test_api.py 代码:

import requests
import pytest

class TestApi:
    def test_login(self):
        url = "http://apis.juhe.cn/****/***"
        headers = None
        params = {
            'key': '从聚合数据拿',
            'phone': '13000000000'
        }
        result = requests.get(url=url,params=params)
        # 输出一下响应结果
        print(result.text)
if __name__ == '__main__':
    pytest.main()

运行一下,诶!接口能用哈!
2.【Testcase】下,创建一个【run.py】文件。
run.py 代码:

import pytest

if __name__ == '__main__':
    pytest.main()

运行一下,发现能调用测试文件,不错不错。
3. 【Testcase】同级目录,创建pytest的配置文件【pytest.ini】,这样就可以自定义配置一些东西了
pytest.ini 代码:

[pytest]
addopts = -vs
#测试用例文件夹
testpaths = ./Testcase
#配置测试搜索的模块文件名称
python_files = test_*.py
#配置测试搜索的测试类名
python_classes = Test*
#配置测试搜索的测试函数名
python_functions = test
  1. 【Testcase】同级目录,创建文件【test.txt】,这里是pytest 用到的一些插件。
    test.txt :
pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
allure-pytest

pytest
pytest-html 生成HTML格式的自动化测试报告
pytest-xdist 测试用例分布式执行,多CPU分发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用于用例失败后的重跑
allure-pytest 用于生成美观的测试报告
这个需要运行一下,进行安装。
打开终端,输入命令:

pip install -r test.txt

5.继续接第2步哈,接口运行没问题了。尝试把url、headers、params放在一个yaml文件中,然后进行读取。
在【Testcase】下,创建【test_api.yaml】文件,并写入数据,参考Yaml文件详解。
test_api.yaml 代码:

-
 url: http://apis.juhe.cn/***/***
 params:
     key: '****************'
     phone: 13000000000

6.数据有了,但是还得读取出来。在【Testcase】下,创建【yaml_read.py】
yaml_read.py 代码:

import yaml

class YamlRead():
    # 传入yaml文件
    def __init__(self,yaml_file):
        # 通过init方法把yaml文件传到这个类
        self.yaml_file = yaml_file
    # 读取yaml文件
    def Yaml_Read(self):
        # 打开yaml 文件作为 f
        with open(self.yaml_file,encoding='utf-8') as f:
            # 读取文件并加载出来到 value
            value = yaml.load(f, Loader=yaml.FullLoader)
            print(value)
if __name__ == '__main__':
    YamlRead('./test_api.yaml').Yaml_Read()

运行一下,发现可以得到【test_api.yaml】中的数据。
7.然后回到【test_api.py】,最关键的@pytest.mark.parametrize()
【test_api.py】修改代码如下:

import requests
import pytest
from yaml_read import YamlRead

@pytest.mark.parametrize('data',YamlRead('./test_api.yaml').Yaml_Read())
class TestApi:
    def test_login(self, data):
        url = data['url']
        params = data['params']
        result = requests.get(url=url,params=params)
        # 输出一下响应结果
        print(result.text)
if __name__ == '__main__':
    pytest.main()

【test_api.py】修改代码如下:

import yaml

class YamlRead():
    # 传入yaml文件
    def __init__(self,yaml_file):
        # 通过init方法把yaml文件传到这个类
        self.yaml_file = yaml_file
    # 读取yaml文件
    def Yaml_Read(self):
        # 打开yaml 文件作为 f
        with open(self.yaml_file,encoding='utf-8') as f:
            # 读取文件并加载出来到 value
            value = yaml.load(f, Loader=yaml.FullLoader)
            return value

然后运行一下【test_api.py】中的if name == ‘main’,发现可以返回正确数据了。(自己提前复制一份,进行一下修改前后的对比哈)
8.一般我们不会这样调用,我们需要运行的只是【run.py】
首先我们把【test_api.py】中的 if 删掉

if __name__ == '__main__':
    pytest.main()

删除或者注释。
然后运行【run.py】,发现报错了,找不到文件。
FileNotFoundError: [Errno 2] No such file or directory: ‘./test_api.yaml’
那就修改下【test_api.py】中的路径

 @pytest.mark.parametrize('data',YamlRead('./test_api.yaml').Yaml_Read())

修改为绝对路径(原因我也不清楚,有知道的小伙伴,麻烦指教下我哈)

@pytest.mark.parametrize('data', YamlRead("/***/***/***/***/Testcase/test_api.yaml").Yaml_Read())

或者

@pytest.mark.parametrize('data', YamlRead(os.getcwd()+'/Testcase/test_api.yaml').Yaml_Read())

然后就可以完美运行了。
9.接下来,要把报告导出来。
学习中。。。待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值