首页 > 其他分享 >pytest测试框架基本使用

pytest测试框架基本使用

时间:2024-03-13 17:31:04浏览次数:22  
标签:测试用例 框架 driver 用例 pytest 测试 div 执行

一、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:用例的输出信息可以在控制台显示  用例执行的步骤更加详细;

-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

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)

标签:测试用例,框架,driver,用例,pytest,测试,div,执行
From: https://blog.csdn.net/qq_38203986/article/details/136644656

相关文章

  • 不使用telnet进行端口测试的方法
    不使用telnet进行端口测试的方法 测试通过样例[root@ip203~]#curl-v10.0.0.210:8082*Abouttoconnect()to10.0.0.210port8082(#0)*Trying10.0.0.210...*Connectedto10.0.0.210(10.0.0.210)port8082(#0)>GET/HTTP/1.1>User-Agent:curl/7.29......
  • 前端框架的发展史&介绍框架特点
    目录1.前端框架的发展历程2.官网、优缺点、使用场景2.1jQuery2.2AngularJS2.3React2.4 Vue.js2.5 Angular1.前端框架的发展历程jQuery(2006年):jQuery是一个非常流行的JavaScript库,用于简化DOM操作和事件处理。它在2006年发布后迅速流行起来,并成为当时前端开发的......
  • dd测试服务器读写速度
     网上dd命令的文章有很多,这里只是自己做下简单的记录。dd命令介绍作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。可以用于测试磁盘命令、数据备份或恢复等。dd命令用于复制文件并对原文件的内容进行转换和格式化处理。用的比较多的还是用dd来备份裸设备。......
  • 【自动化测试入门】用Airtest - Selenium对Firefox进行自动化测试(0基础也能学会)
    1.前言本文将详细介绍如何使用AirtestIDE驱动Firefox测试,以及脱离AirtestIDE怎么驱动Firefox(VScode为例)。看完本文零基础小白也能学会Firefox浏览器自动化测试!!!2.如何使用AirtestIDE驱动Firefox浏览器对于Web自动化测试,目前AirtestIDE支持chrome浏览器和Firefox2种浏览器,今天......
  • 一个数据库死锁竟然被测试发现了,这你敢信
    测试生产监控发现数据库死锁报错:org.springframework.dao.DeadlockLoserDataAccessException:###Errorupdatingdatabase.Cause:com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:Deadlockfound 测试是通过什么方式发现呢?  还要从前一段时间老......
  • CANape 22.0新特性:小改进大作用,为汽车测试工程带来更多便利!
    大家好!在前文中,我们已经了解了CANape22.0版本的主要新特性,现在,我们将进一步探索CANape22.0新增的一系列小而美的新特性。尽管这些特性可能不如前文提到的主要更新那样惊艳,但它们同样是CANape22.0版本的亮点所在,这些微小改进将为广大汽车测试工程师们带来更多便利并提升工作效率......
  • 从0开始一个毕设,如何选择一个合适的框架/技术(技术路线)
    用户端-前端:uniapp(可以打包成App、小程序、网页)管理员端-前端:LayUI-mini(原生HTML)、Vue后端:Flask(python)、SSM(Java)、ThinkPHP(PHP)识别算法:Yolo系列(检测)、Dert系列(检测)、VGG16(分类)大模型:CLIP(分类)、StableDiffusion(绘制,比较吃电脑配置)......
  • Python之Web开发中级教程----搭建Web框架二
    Python之Web开发中级教程----搭建Web框架二搭建虚拟环境虚拟环境的作用虚拟环境可以搭建独立的python运行环境,使得单个项目的运行环境与其它项目互不影响.搭建虚拟环境 (1)安装sudopipinstallvirtualenvsudopipinstallvirtualenvwrapper(2)配置环境变量1)创建......
  • CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis
    前言:前几天,点开自己的博客,看了一下CYQ.DataV5系列 都有哪些文章,发现了一篇2019年写的:CYQ.Data对于分布式缓存Redis、MemCache高可用的改进及性能测试,于是点进去看了看。感觉文章中有些表述存有问题,不过不是重点。重点,看了里面的测试结论,如果四五年过去了,CYQ.Data 低调的......
  • Gin Web框架在Go语言中的应用与实践
    引言Gin是一个用Go语言编写的HTTPWeb框架。它以高性能、简洁的API设计和良好的生产率而闻名。Gin框架的设计理念是使得开发者能够以最少的代码实现强大的Web应用功能。本文档将介绍Gin框架的核心概念、特性、安装、基本用法以及一些高级应用场景。Gin框架的......