Pytest基础使用

Pytest基础使用

前言:Pytest是一款成熟的Python测试框架,完全正向兼容unittest。简洁可以实现参数化,自带测试报告;第三方库注意版本兼容。

pip install pytest==6.0.1       # 安装某一版本的pytest
pip install pytest-html==3.1.1  # 安装pytest-html生成测试报告

1,Pytest用例执行规则

  1. 类的名字建议使用Test大头
  2. 用例函数的名字必须test开头,区分大小写
# 导入 pytest 测试框架
import pytest
# 定义 TestOrdering 类
class Test11():  # 测试类(测试套)不需要继承
    # 定义 test_login11() 方法
    def test_login11(self):
        print(" 正在执行登录用例第一条 ")
    # 定义 test_add() 方法
    def test_login22(self):
        print(" 正在执行登录用例第二条 ")
    # 定义 test_del() 方法
    def test_login33(self):
        print(" 正在执行登录用例第三条 ")
        
if __name__ == '__main__':
    pytest.main(['-v','-s','test11.py'])  # 执行测试代码
  • 整个参数是以列表的形式传入
  • -v 参数显示命令执行过程, -s 参数显示打印的信息
  • 如不加 -s 参数,则 print() 函数打印的信息不会显示
  • ‘test11.py’ 是测试文件名字 必须写的
针对加减乘除功能测试
# 被测代码
class Count:
    def __init__(self,a,b):
        self.a=int(a)
        self.b=int(b)
    def add(self):
        return self.a + self.b
    def sub(self):
        return self.a - self.b
    def mul(self):
        return self.a * self.b
    def div(self):
        return self.a / self.b
# 测试代码
import pytest
class TestAdd():
    def test_add1(self):
        assert Count(2,3).add() == 5
    def test_add2(self):
        assert Count(21,31).add() == 52
    def test_add3(self):
        assert Count(40,70).add() == 110
if __name__ == '__main__':
    pytest.main(['-v','-s','jwtest.py'])

2,断言和测试固件

上面代码中使用的 assert 就是断言Pytest是使用断言来判断实际结果和预期结果是否相同;

测试断言
  • 判断是否相等

    assert x == y

    assert x != y

  • 判断是否真假

    assert x 预期结果是True

    assetrt not x 预期结果是False

  • 判断是否包含

    assert x in y

测试固件
  • 类级别

    setup_class() 所有测试用例执行前执行一次

    teardown_class() 所有测试用例执行后执行一次

  • 函数级别(每条测试用例都会执行)

    setup() 用例执行前

    teardown() 用例执行后

3,参数化-单个参数化

参数化概念

​ 在接口用例中 单个参数的参数化的作用是主要读出所有的测试用例放到列表中,然后依次取出列表中的用例供函数使用,从而完成每一个用例的执行。

单个参数化语法
@pytest.mark.parametrize(argnames,argvalues)
import pytest

@pytest.mark.parametrize("username",["张三","李四","王五"])
def test_login(username):
    print(f"登录用户数据为 {username}")  # 引用变量username
if __name__ == '__main__':
    pytest.main(['-v','-s','test12.py'])
  • 函数形参username,必须和参数化写的参数名字一致
  • 参数化类似个for循环,依次从参数列表中取出元素赋值个username变量
  • 列表数据格式还可以是元组,字典等类型,类型相同(不同也OK,不要自添烦恼)
@pytest.mark.parametrize("case",[(2,3,5),(21,31,52),(40,70,110)])
def test_add1(self,case):
    j=Count(case[0],case[1]) # 有黄色警告是正常的
    assert j.add()==case[2]
@pytest.mark.parametrize("user",[{'name':'zhangsan'},{'password':123456}])
def test_register (user):
    Rsgister(user['name'], user['password'])

4,参数化-多个参数化

import pytest

@pytest.mark.parametrize("username",["张三","李四","王五"])
@pytest.mark.parametrize("password",["test1234","test5678","test9876"])
def test_login(username, password):
    print(f"登录用户名为 {username},密码{password}")  # 引用变量username
if __name__ == '__main__':
    pytest.main(['-v','-s','test14.py'])
  • 多个参数化时类似多层for循环,测试用例数回以相乘的方法增加,比如上面会有 3*3=9条测试结果

5,pytest测试报告

pytest.ini报告配置文件
  • 文件名称不能更改
  • 路径必须放在项目工程根目录下
  • 规则名称不能更改
  • 唯一能变的是规则值

一图胜千言
总结:pytest基本使用API表格

pytest对象方法
pytesttest开头是用例
assert 断言
@pytest.mark,parameterize() [字符串、元组、字典]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值