web自动化-pytest测试框架基本使用

一、pytest测试框架简介


pytest是Python中的单元测试框架
1、pytest特点:

  • 容易上手,入门简单,丰富的文档资料,文档中有很多实例可进行参考
  • 支持参数化
  • 执行用例过程中可以进行标记跳过用例,标记失败用例
  • 支持重复执行失败的用例
  • 具有很多的第三方插件,并且可以实现自定义扩展
  • 便捷管理用例,方便和持续集成工具相互结合,便于生成测试报告


2、测试框架的核心作用

  • 找到测试用例
  • 执行测试用例
  • 管理测试用例
  • 断言测试用例
  • 生成测试报告

二、pytest常用插件

pytest  测试框架本身

pytest-html   生成html测试报告

pytest-xdist   多线程运行

pytest-ordering   控制用例的执行顺序

pytest-rerunfailures   控制失败用例重跑

allure-pytest         生成allure测试报告

pytest-base-url     管理基础路径

在项目中安装所有插件:

       在项目的路径下, 新建一个requiremens.txt        

        写上所有插件的名字

        在命令行安装命令:pip install-r requiremens.txt

三、pytest默认的测试用例执行规则

1、包名必须是以test开头或者test结尾

2、模块名必须是以test开头或者test结尾

3、用例名必须是以test开头或者test结尾       

        函数

        方法  ---实例方法和类方法

举例如下:

简单使用:定义一个函数做用例去执行, 想要封装的话,放在一个类里边,作为类方法去使用。

四、pytest两种执行方式

1.通过命令行执行:pytest -vs

 s:用例的输出信息可以在控制台显示;

v用例执行的步骤更加详细;

-k 用例名 :有多个用例时,指定该用例执行,其他用例不执行。

2.通过主函数run.py运行(具体:项目下创建run.py   右键执行):


import pytest

if_name="_main_":

        pytest.main()

五、常用装饰器

        如果一个.py(也就是模块中)有多个测试用例,有不需要执行的用例或者执行顺序等,可使用装饰器。

5.1、pytest标记跳过测试用例

无条件跳过用例

有条件跳过用例

skipif  如果没有给条件,默认条件不满足的,直接跳过(不执行);如果给了条件,条件成立,则跳过(不执行),条件不成立,则不跳过(执行用例)

5.2、pytest控制测试用例的执行顺序

用例的执行默认顺序是按照包名,文件名以及函数名前后顺序执行的方式pytest提供了可以修改执行用例顺序的插件pytest-ordering

先执行order 为1、2、3的;然后执行没有定义的测试用例,从上到下依次执行。

5.3、pytest标记失败测试用例

标记预期会出现异常失败的测试用例,只有出现异常才符合预期,执行会出现XFAIL结果;不出现异常反而不对,执行会出现XPASS结果。

如果符合预期失败:
XFAIL结果

标记失败--成功

如果不符合预期失败:
XPASS结果

标记失败--失败

5.4、pytest标记参数化

对于相似的用例执行过程,但是使用的数据不一样,那么就可以使用参数化实现

参数的基本使用:

六、案例使用


标记参数化应用到项目实例中

import time
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

@pytest.mark.parametrize("username, password", [(1, 2), (3, 4)])
def test_login02(username, password):
    driver = webdriver.Chrome()   # 获取驱动
    driver.get("https://。。。。。。。。/login")  # 目标网站-网址-登录页面
    driver.maximize_window()   # 页面最大化
    # 定位到【账号】元素
    element1 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
                                             'form/div[1]/div/div/input')
    element1.send_keys(username)
    # 定位到【密码】元素
    element2 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
                                             'form/div[2]/div/div/input')
    element2.send_keys(password)

    # 定位到【登录】元素
    element3 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/button')

    element3.click()

    time.sleep(5)

七、参数化一般会结合数据驱动进行自动化测试

所有数据的获取必须使用不同的方式去使用的。

数据驱动测试DDT

  • Data数据
  • Driver驱动
  • Tests用例

数据驱动测试的数据存储方式有很多种类型

  • Text文本
  • Csv文件  --最好用
  • Excel文件
  • Json文件
  • Yaml文件

通过csv的数据存储方式读取数据:

1、在utilsCes .py中定义

# 实现数据驱动测试之读取csv文件数据符合参数化标准
def get_data():
    data_list = [] # 空列表
    c1 = csv.reader(open("666.csv"))
    print(c1)  # c1存的是内存地址
    print(type(c1))
    for i in c1:
        # print(i)  # 结果:一行数据就是一个列表
        data_list.append(i)
    else:
        return data_list

666.csv文件内容如下: 

2、在实际测试用例test_login.py中使用

import time
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from utilsCes import get_data
# @pytest.mark.parametrize("username, password", [(1, 2), (3, 4)])
@pytest.mark.parametrize("username, password", get_data())
def test_login02(username, password):
    driver = webdriver.Chrome()
    driver.get("https://uat.i-nursingcare.com:8443/manage/#/login")
    driver.maximize_window()

    # 线性用例脚本
    # 账号
    element1 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
                                             'form/div[1]/div/div/input')
    element1.send_keys(username)
    # 密码
    element2 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
                                             'form/div[2]/div/div/input')
    element2.send_keys(password)
    
    # 登录
    element3 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/button')

    element3.click()

    time.sleep(5)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值