Web自动化测试3——数据驱动+pytest

视频传送门:https://www.bilibili.com/video/BV1Ey4y1L7xU?p=8&spm_id_from=pageDriver

一、DDT+EXCEL数据驱动

excel/yaml (excel适合做web自动化测试,yaml适合做接口自动化)

1.什么是DDT
data driver test数据驱动测试。可以完美和Unitttest结合实现数据驱动。

2.DDT使用的方式(通过装饰器来使用)
在函数或者类上面加上一个装饰器用来实现一些特定的功能。

@ddt 装饰类,作用是用于声明当前类使用ddt数据驱动。
@data 装饰函数,作用是给函数传值。
@unpack 装饰函数,作用是数据解包
@file_data 装饰函数,作用是直接读取yaml、json文件。

二、Pytest

pytest是unittest的升级版

可以结合allure生成定制版的测试报告

支持很多强大的第三方插件

allure-pytest(生成allure报告),pytest-xdist(做并发),pytest-ordering(处理测试用例的执行顺序)…

三、pytest默认规则

1.模块名必须以test_开头或者_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头

将unittest改为pytest
base_util.py修改如下:

import time

from selenium import webdriver

class BaseUtil:

    def setup(self) -> None:     #unittest是setUp,pytest是setup
        global driver
        # 打开浏览器
        self.driver = webdriver.Chrome()
        driver = self.driver
        # 加载网页
        self.driver.get("http://localhost/ecshop/admin/privilege.php?act=logout")

    def teardown(self) -> None:     #unittest是tearDown,pytest是teardown
        time.sleep(3)
        self.driver.quit()

test_login.py修改如下:

import pytest
from ddt import ddt, data, unpack
from selenium import webdriver

from base.base_util import BaseUtil
from common.excel_util import ExcelUtil
from pageobject.login_page import LoginPage

# @ddt
class TestLogin(BaseUtil):

    # @data(*ExcelUtil().read_excel())
    # @unpack
    @pytest.mark.parametrize("index,username,password", ExcelUtil().read_excel())
    def test_01_login(self, index, username, password):
        """ 登录 """
        lp = LoginPage(self.driver)
        lp.login_ecshop(username, password)
        if index == 1:
            # 断言
            # self.assertEqual(lp.get_except_result(),'退出')
            assert lp.get_except_result() == '退出'

all.py修改如下:

import os
import unittest
from HTMLTestRunner import HTMLTestRunner

import pytest

if __name__ == '__main__':
    # #执行需要的用例,并且生成HTML格式的自动化的测试报告
    # #使用unittest默认的测试用例的加载器去发现testcase目录下以py结尾的所有的测试用例
    # suite = unittest.defaultTestLoader.discover("./testcase","*.py")
    # #生成html报告文件
    # report_file = open("./report/reports.html","wb")
    # #s生成一个HTMLTestRunenr运行器对象(必须下载一个文件HTMLTestRunner.py,放到python的lin目录)
    # runner = HTMLTestRunner(stream=report_file,title="ECSHOP自动化测试报告", description="报告详情如下:")
    # #通过运行器运行测试用例
    # runner.run(suite)
    
    #第一步:生成json格式临时文件
    pytest.main(['-vs',r'E:\workspace\pythonwork\publicdemo\testcase','--alluredir','./temp','--clean-alluredir'])
    #第二步:根据json格式临时文件生成allure报告
    os.system("allure generate ./temp -o ./report --clean")

第一步
pytest.main是用来运行pytest测试用例的,它会自动寻找符合pytest规则的用例
‘-vs’表示打印数据结果
第二个参数是表示测试用例在哪个目录
‘–alluredir’,’./temp’表示allure报告放在根目录的temp目录下
'–clean-alluredir’表示每次执行都把temp目录清除掉
第二步
allure generate表示构建
./temp 是根据temp目录下的json文件
-o 表示输出
./report 输出到report目录下
–clean 表示每次都清除原来的文件

上一篇:Redis 启动 配置AOF


下一篇:Redis学习笔记