欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytest单元测试框架详解+Pytest+Allure环境的搭建

程序员文章站 2024-01-25 16:00:34
...

参考:https://blog.csdn.net/liuchunming033/category_3193659.html

(一)Pytest简介

     pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:

  •     非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  •     能够支持简单的单元测试和复杂的功能测试
  •     支持参数化
  •     执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
  •     支持重复执行失败的case
  •     支持运行由nose, unittest编写的测试case
  •     具有很多第三方插件,并且可以自定义扩展
  •     方便的和持续集成工具集成

 (二)pytest框架的使用

  1. 编写的class和方法必须遵循以下规则

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头(不能小写test开头),并且不能带有 __init__ 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可

  2.用例代码

import pytest
#1.规定:
    # 测试文件以test_开头(以_test结尾也可以)
    # 测试类以Test开头,并且不能带有 init 方法
    # 测试函数以test_开头
    # 断言使用基本的assert即可
#2.执行模块命令:
    # pytest 模块名称 例如:pytest test_123.py

#3.生成测试报告
    # pytest --html=report.html

#4.运行模式
    # 模式1:直接运行test_hello.py文件中的所有cases: pytest test_hello.py
    #模式2:运行test_hello.py文件中的TestClassOne这个class下的两个cases: pytest test_hello.py::TestClassOne
    # 模式3:运行test_hello.py文件中的TestClassTwo这个class下的test_one: pytest test_hello.py::TestClassTwo::test_one
class TestClassOne(object):
    def test_one(self):
        x = "this"
        assert 't'in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, 'check')


class TestClassTwo(object):
    def test_one(self):
        x = "iphone"
        assert 'p'in x

    def test_two(self):
        x = "apple"
        assert hasattr(x, 'check')

  3.用例运行总结为以下三种运行模式

  • 模式1:直接运行test_hello.py文件中的所有cases: pytest test_hello.py
  • 模式2:运行test_hello.py文件中的TestClassOne这个class下的两个cases: pytest test_hello.py::TestClassOne
  • 模式3:运行test_hello.py文件中的TestClassTwo这个class下的test_one: pytest test_hello.py::TestClassTwo::test_on

  4.生成测试报告

pytest --html=report.html

pytest单元测试框架详解+Pytest+Allure环境的搭建

执行以上命令在项目report.html文件,现在我们用浏览器打开report.html看一下

pytest单元测试框架详解+Pytest+Allure环境的搭建

(三)  Pytest+Allure环境的搭建

现在我们想要用例执行完成后,使用可视化界面展示用例的执行情况,方便查看测试报告,我们要使用到可是化工具allure

环境代建步骤:

1.安装JDK1.8,并配置环境变量:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2.Windows下不能直接安装,点击此链接下载压缩包

3.解压好allure,把allure配置环境变量,例如D:\Program Files\allure-2.7.0\bin配置在系统环境变量中

4.验证环境变量是否配置成功:allure --version

5.安装pytest,命令:pip install pytest

完成以上步骤,现在我们验证一下用例执行完成,allure是否可以展示用例的执行情况

测试代码如下:

#!/usr/bin/env python
# coding=utf-8

import pytest
import allure
# allure generate --clean report 生成测试报告
@allure.feature('购物车功能')  # 用feature说明产品需求,可以理解为JIRA中的Epic
class TestShoppingTrolley(object):
    @allure.story('加入购物车')  # 用story说明用户场景,可以理解为JIRA中的Story
    def test_add_shopping_trolley(self):
        login('刘春明', '密码')  # 步骤1,调用“step函数”
        with allure.step("浏览商品"):  # 步骤2,step的参数将会打印到测试报告中
            allure.attach('笔记本', '商品1')  # attach可以打印一些附加信息
            allure.attach('手机', '商品2')
        with allure.step("点击商品"):  # 步骤3
            pass
        with allure.step("校验结果"):  # 步骤4
            allure.attach('添加购物车成功', '期望结果')
            allure.attach('添加购物车失败', '实际结果')
            assert 'success' == 'failed'

    @allure.story('修改购物车')
    def test_edit_shopping_trolley(self):
        pass

    @pytest.mark.skipif(reason='本次不执行')
    @allure.story('删除购物车中商品')
    def test_delete_shopping_trolley(self):
        pass


@allure.step('用户登录')  # 将函数作为一个步骤,调用此函数时,报告中输出这个步骤,我把这样的函数叫“step函数”
def login(user, pwd):
    print(user, pwd)

上面使用了Allure的几个特性:

  •     @allure.feature # 用于描述被测试产品需求
  •     @allure.story # 用于描述feature的用户场景,即测试需求
  •     with allure.step # 用于描述测试步骤,将会输出到报告中
  •     allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
  •     @pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤

生成测试报告需要执行命令:

首先执行pytest -s --alluredir=report命令,生成的文件是json格式,怎么办?

执行命令:allure generate --clean report 另外生成一个allure-report文件夹,用浏览器打开index.html即可

pytest单元测试框架详解+Pytest+Allure环境的搭建

pytest单元测试框架详解+Pytest+Allure环境的搭建

pytest单元测试框架详解+Pytest+Allure环境的搭建 pytest单元测试框架详解+Pytest+Allure环境的搭建