全网最细,Pytest自动化框架fixture和conftest.py实战详解(细致)

news2024/11/22 18:46:50

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

fixture说明

fixture可以让我们自定义测试用例的前置条件,fixture可作为共享数据使用

1、fixture可以当做参数传入

import pytest
 
@pytest.fixture()
def test1():
    print('\n开始执行function')
def test_a(test1):   #传函数名
    print('---用例a执行---')
class TestCase:
    def test_b(self, test1):
        print('---用例b执行')
 
if __name__ == '__main__':
    pytest.main(["-s", "-v", "-q","test_fixture03.py"])

运行结果:

31

2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

import pytest
@pytest.fixture()
def test1():
    print('\n开始执行function')
 
 
@pytest.mark.usefixtures('test1')   #关键字,可以传多个
def test_a():
    print('---用例a执行---')
 
@pytest.mark.usefixtures('test1')
class TestCase:
    def test_b(self):
        print('---用例b执行---')
 
    def test_c(self):
        print('---用例c执行---')
 
 
if __name__ == '__main__':
    pytest.main(["-s", "-v", "-q","test_fixture2.py"])

运行结果:

32

3、usefixtures与传fixture区别
如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能将参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

fixture的参数使用
示例代码如下:

import pytest
seq=["hello","itesting"]
@pytest.fixture(scope="function",params=seq,autouse=True,ids=['test1','test2'],name='test')
def my_method(request):
    # request用来接收param列表数据
    print(request.param)
 
def test_use_fixtures_01():
 
    print("\n this 1st test")
 
def test_use_fixtures_02():
    print("\n this 2nd test")
 
if __name__ == '__main__':
    pytest.main(["-s", "-v", "-q","test_fixture2.py"])

运行结果:

33

参数说明:
scope:即作用域,function"(默认),“class”,“module”,"session"四个,本例中使用function即每一个测试函数都会执行;

params:可选参数列表,它将导致多个参数调用fixture函数和所有测试使用它。params提供了2组参数,所以共有4条测试用例被执行;

autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture;

ids:params测试ID的一部分。如果没有将从params自动生成.
name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name。
session的作用域:是整个测试会话,即开始执行pytest到结束测试

使用conftest.py共享fixture

全局范围内使用同一个测试前置操作,例如,测试开始时先登录,再连接数据库
目录结构:

34

conftest文件内容:

import pytest
from selenium import webdriver
import requests
import time
@pytest.fixture(scope="session")
def login():
    driver = webdriver.Chrome()
    driver.implicitly_wait(30)
    base_url = "http://www.baidu.com/"
    s=requests.Session()
    #注意关键字yield
    yield driver,s,base_url
    print('turn off browser driver')
    driver.quit()
    print('turn off request driver')
    time.sleep(2)
    s.close()

@pytest.fixture(scope="function",autouse=True)
def connect_db():
    print('connecting db')
    pass

def pytest_configure(config):
    config.addinivalue_line(
    "markers", "baidu" # login_success 是标签名
)

test_baidu_fixture_sample.py文件内容:

import pytest
import time
 
@pytest.mark.baidu
class TestBaidu:
    @pytest.mark.parametrize('search_string,expect_string',[('iTesting','iTesting'),('helloqa.com','iTesting')])
    def test_baidu_search(self,login,search_string,expect_string):
        driver, s, base_url =login
        time.sleep(2)
        driver.get(base_url + './')
        driver.find_element_by_id("kw").send_keys(search_string)
        driver.find_element_by_id("su").click()
        time.sleep(2)
        search_results=driver.find_element_by_xpath('//*[@id="1"]/h3/a').get_attribute('innerHTML')
        print(search_results)
        assert(expect_string in search_results) is True
 
if __name__ == '__main__':
    pytest.main([])

test_fixture1.py文件内容:

class TestClass:
    def test_use_fixtures_01(self,login):
        print('\nI am data:{}'.format(login))

在项目根目录下执行命令:

pytest -s -q --tb=no tests

运行成功后,可以看到connecting db 语句打印了3次,原因是conftest.py文件里面,connect_db 的作用范围为function和autouse,login的作用范围是session

在conftest.py文件里有一个关键字yeild,当他作用与pytest的fixture时,yield关键字之前的语句属于前置操作,而yield之后的语句属于后置操作,即可以用一个函数实现测试前的初始化和测试后的初始化

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有坚持不懈的努力,才能绽放出属于自己的辉煌。无论前路多么艰难险阻,只要心中燃起希望的火焰,我们定能攀登人生高峰。相信自己,奋斗不止。

时光荏苒,机遇稍纵即逝,只有付出才能收获,只有奋斗才能成功。坚持不懈的努力,将点滴汇聚成壮丽的波涛,让梦想在实现的道路上一路绽放辉煌!

奋斗是实现梦想的舞台,不放弃是成功的密码,坚持是进步的阶梯,努力是超越自我的力量。相信自己,勇往直前,每一份付出都将成就更加辉煌的未来!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你一定不知道的自动化测试的9大规则

目录 前言 应该去做的事情 雇用合适的人 在寻找正确的测试自动化工具方面花点时间 轻装上阵 让开发人员参与到自动化过程中来 在ci/cd上投资时间 不应该做的事情 不要因为一个工具被追捧就选择它 不要试图将一切都自动化 不要太早实现自动化 永远不要用自动化来取代…

C语言-报错集锦-02-munmap_chunk(): invalid pointer: 0x0000000001d2e150 ***

一、报错信息 [2023-7]--[ Debug ]--Destroy DqlResult Struct OK [2023-7]--[ Debug ]--Destroy Moia Base Job : OK [2023-7]--[ Debug ]--Destroy Moia Base Job : OK [2023-7]--[ Debug ]--Destroy Moia Base Job : OK [2023-7]--[ Debug ]--Destroy Mo…

Redis学习(二)线程安全、分布式锁、消息队列

文章目录 优惠券秒杀全局ID生成器优惠券秒杀下单超卖问题一人一单 分布式锁基于Redis的setnx指令实现分布式锁解决锁误删问题基于Lua脚本实现多条指令原子性Redis调用Lua脚本Java中使用Lua脚本 RedissonRedisson快速入门Redisson可重入锁原理Redisson的锁重试和Watchdog机制Red…

【经济调度】基于多目标宇宙优化算法优化人工神经网络环境经济调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

适配各类大模型应用!手把手教你选择 Zilliz Cloud 实例类型

作为大模型时代备受关注的细分赛道,向量数据库可以不仅为大模型提供存储和向量检索的功能,还能适配各种 AI 应用场景,例如聊天机器人、内容审核、增强 LLM 知识库等。 不过,对于向量数据库的开发者而言,成本是绕不开的…

Spring学习笔记---SpringBoot快速入门

Spring学习笔记---SpringBoot快速入门 Spring学习笔记---SpringBoot1 SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试 1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择…

(二)springboot实战——springboot基于多端内容协商适配实现json、xml、yaml等格式数据统一返回

前言 在实际应用开发场景中,我们有需求实现多端内容请求的适配,例如某些客户端需要返回json数据,有些客户端需要返回xml数据,有些客户端要返回yaml数据,这个时候就需要服务端做内容返回的适配,如果按照提供…

搭建vsto的clickonce一键发布IIS环境FTP

要在 Windows 上启用 IIS(Internet Information Services),可以按照以下步骤进行操作:1. 打开“控制面板”:点击 Windows 开始菜单,然后在搜索栏中输入“控制面板”,并选择相应的结果。2. 打开“…

Maven 项目构建生命周期

Maven 项目构建生命周期 一句话: Maven 构建生命周期描述的是一次构建过程经历了多少个事件 生命周期的3 大阶段 clean 清理工作 default 核心工作,例如编译,测试,打包,部署等 site 产生报告,发布站点等 生命周期…

zsh自定义命令行提示符

环境: oh-my-zsh 插件 效果: 本来的样子:感觉元素很多,比较挤占地方 现在的样子:简洁了很多 步骤: 打开主题的配置文件(我的主题是agnoster ) cd /Users/你的家目录/.oh-my-zsh/the…

Windows操纵kafka

这里写目录标题 启动kafk创建一个测试主题查看所有主题查看first详细信息修改分区数(分区数只能增加 不能减少)删除主题生产者生产数据消费命令 启动kafk 安装目录下 .\bin\windows\kafka-server-start.bat .\config\server.properties创建一个测试主题 安装目录下 .\bin\wi…

【Unity2D像素风格小游戏】期末考考完,和搭档一个月从零开始的Unity速成作品!

游戏实况视频 六月十八号,期末考完后,大佬搭档和我开始自学unity,并在七月一号正式开始一个unity2D像素小游戏的制作,这是一段很有意义,很有收获的日子。 这个项目由搭档提出,另一位超级大佬进行前期指导…

【分布式系统案例课】计数服务之存储设计

存什么? 两种存储内容,各有优劣 综合:耽搁时间和聚合数据都分别进行存储,可以得到两者的好处。 数据库选型 SQL数据库客户端嵌入代理 因为B站的数量级,单个数据库肯定是扛不住的。然后为了满足扩展性需求&#xf…

Python入门级语法详解以及实战练习

来源:投稿 作者:起酥松松 编辑:学姐 python基本语法元素 变量命名原则: 首字符不能是数字; 中间不能有空格; 不能是python保留字; 字母 ,数字 ,汉字 ,下划…

【学会动态规划】三步问题(2)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

骨传导耳机好不好,盘点五款当下最流行的骨传导耳机

其实早在几年前,骨传导耳机就已经出现在大众视野了,由于使用的人数不多,所以一直不温不火的,最近这几年,骨传导耳机的热度才开始兴起,其最大的特点就是,不用入耳佩戴,不用担心运动过…

HOT60-单词搜索

leetcode原题链接:单词搜索 题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成&#…

分体式骨传导,为敏感耳朵打造的舒适体验,南卡OE上手

骨传导蓝牙耳机这两年很受运动玩家的欢迎,不过标准的骨传导耳机用起来并不算方便,最近我看到南卡新推出一种分体式骨传导耳机,叫南卡OE,和普通的骨传导耳机有很大不同。上周我也入手了一款,这几天试了试,感…

基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】

超详细教程系列在我前面的文章中也有不少的实践记录,感兴趣的话可以自行阅读即可: 《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》 《基于yolov5-v7.0开发实践实例分割模型超详细…

实现java参数非必传

1、路径参数: PathVariable(required false)实现参数aaa非必传 2、非路径参数: RequestParam(required false) 实现参数aaa非必传 3、实体参数: RequestBody(required false)实现实体aaa非必传