pytest---添加自定义命令行参数(pytest_addoption )

前言

在目前互联网公司中,都会存在多个测试环境,那么当我们编写的自动化想要在多套测试环境下进行运行时,如何使用?大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境,但是这时候就会增加一些工作量,每次运行不同的环境,都需要进行再配置文件中进行修改地址,这样很不方面,今天小编介绍一种pytest的钩子函数,这个函数可以帮助我们很容易的解决这个问题。

pytest_addoption 

  pytest_addoption是pytest的钩子函数之一,用于为pytest添加自定义选项,并将这些选项传递给测试用例。可以通过修改pytest的配置文件(pytest.ini)或使用命令行参数来设置这些选项。pytest_addoption该函数一般需要和pytest的fixture内置函数request中的request.config.getoption(获取命令行参数信息)进行结合使用。

  在上述问题中,我们可以通过在命令行参数中对测试环境地址进行修改,这样就可以在不修改配置文件的情况下,只通过命令行参数进行在不同的测试环境中执行相同的自动化代码。

def pytest_addoption(parser):
    parser.addoption(
        "--anjing",
        action="store",
        default="dev",
        help="通过'anjing'添加自定义命令行参数名称"
    )

参数介绍

pytest_addoption中常用到的一些参数介绍

name:表示自定义命令行参数的名称,一般通过“--xxx”来使用;

action:表示命令行中遇到此参数时要采取的存储该参数对应的参数值的基本操作类型,默认为“store”;

default:表示如何命令行中没有传入该参数的值,则取默认值

help:对参数作用的简介和说明

使用方法

关于pytest_addoption的一些简介和用途已经介绍完毕了,接下来跟着小编一起查看如何使用pytest_addoption来解决我们的问题。

  1. 需要在conftest.py文件中进行创建一个pytest_addoption函数,对其进行设置对应参数类型
  2. 通过pytest.fixture创建函数,获取命令行对应参数值
  3. 通过编写测试用例中调用对应的函数名称
  4. 命令行执行时,添加对应命令行参数

小编先列举下conftest.py文件中关于pytest_addoption的编写

# conftest.py文件
# coding:utf-8
import pytest

def pytest_addoption(parser):
    parser.addoption(
        "--anjing", action="store", default="anjing", help="将'anjing'添加到pytest的配置参数中"
    )
    parser.addoption(
        "--env", action="store", default="dev", help="env:表示命令行参数内容,不填写默认输出default的值内容"
    )
@pytest.fixture()
def anjing(request):
    return request.config.getoption("--anjing")
    
@pytest.fixture()
def env(request):
    return request.config.getoption("--env")

再根据conftest.py文件中的内容编写对应的测试用例

# coding:utf-8
def test_01(anjing):
    if anjing == 'test':
        print('命令行传参成功!')
    else:
        print('命令行取默认值!')

def test_02(env):
    if env == 'test':
        print('传参成功!')
    else:
        print('传参失败!')

通过cmd执行时候,后续进行添加了对应的命令行参数值,这里小编是对两个命令行参数都添加了值,那么如果不添加值会怎么样呢?

通过执行结果可以看出来,当我们没有添加参数时,这里小编忘记打印返回值了,其实会实际输出默认值,就是我们在函数中设置的default

我们上面使用的方法是通过XXX=XXX的格式来输出的,这里我们也可以通过--xxxx 值,参数和值之间通过空格进行输入,结果都是一样的。

案例展示

上述小编是介绍了如何使用,那么我们如何在接口项目中使用呢?小编这里通过一个简单的方法通过项目进行展示,这里小编通过将默认值值变成了请求成功的url地址,添加参数为错误的url地址

# conftest.py文件
# coding:utf-8
import pytest
def pytest_addoption(parser):
    parser.addoption(
        "--url", 
        action="store", 
        default="http://apis.juhe.cn/simpleWeather/query",
        help="将'anjing'添加到pytest的配置参数中"
    )
    
@pytest.fixture()
def anjing(request):
    return request.config.getoption("--url")

conftest.py文件中我们将默认请求成功的地址写入到默认值中,然后继续编写接口请求地址,在添加一个命令行参数的函数

# test_01.py文件
# coding:utf-8
import requests
def test_01(anjing):
    data = {
        'city': "上海",
        'key': '331eab8f3481f37868378fcdc76cb7cd'
    }
    r = requests.post(anjing, data=data)
    result = r.json()['reason']
    assert result == '查询成功!'

通过cmd进行运行程序,我们先不添加任何命令行参数,让其请求默认参数值的内容,发现测试用例请求成功了。

接下来我们通过随便在命令行参数后跟一个不正确的url地址,去模拟请求,这里肯定是无法请求成功的,因为我们请求的百度,不能请求成功。(主要模拟测试环境场景)

总结

小编通过简单的方法介绍了如何使用pytest_addoption进行来模拟不同测试环境下,我们如何进行执行我们的测试用例,当然pytest_addoption的用途不仅仅只有这么多,具体如何使用,大家可以根据自己公司内容的项目进行结合使用。感谢您的阅读,希望本篇文章对您有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL以及版本介绍

一、MySQL的介绍 MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用…

DEAP库文档教程五----计算统计

本小结将重点围绕模型在计算统计方面的问题,进行详细的论述 1、Computing Statistics 通常情况下,我们想要在优化过程中编辑数据。Statistic模块可以在任何设计好的目标上改变一些本不可改变的数据。为了达到这个目的,需要使用与工具箱中完…

企业数字化转型的关键技术有哪些?_光点科技

随着科技的不断进步和信息技术的快速发展,企业数字化转型已经成为保持竞争力和适应市场变化的关键举措。在这个数字化时代,企业需要借助先进的技术来优化业务流程、提升效率,以及更好地满足客户需求。以下是企业数字化转型过程中的关键技术。…

Modbus转Profinet网关在大型自动化仓储项目应用案例

在自动化仓储项目中,Modbus是一种常见的通信协议,用于连接各种设备,例如传感器、PLC和人机界面。然而,Modbus协议只支持串行通信,并且数据传输速度较慢。为了提高通信效率和整体系统性能,许多大型仓储项目选…

Docker环境搭建Prometheus实验环境

环境: OS:Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…

02_块元素和行内元素的使用

一、HTML块元素和行内元素的使用 1、块元素: div标签 定义和用法&#xff1a; 标签块元素,表示一块内容,div标签可以把文档分割为独立的、不同的部分可以使用css设置宽高默认是占用一整快 例如: <html><body><!-- 块元素:div标签 --><div style"he…

C++面试题(陆)-数据库(一)

目录 数据库 1.1SQL 1.1.1 介绍一下数据库分页 1.1.2 介绍一下SQL中的聚合函数 1.1.3 表跟表是怎么关联的&#xff1f; 1.1.4 说一说你对外连接的了解 1.1.6 SQL中怎么将行转成列&#xff1f; 1.1.7 谈谈你对SQL注入的理解 1.1.8 将一张表的部分数据更新到另一张表&am…

STM32 RTC实验

RTC时钟简介 STM32F103的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。 STM32的RTC模块拥有一组连续计数的计数器&#xff0c;在相对应的软件配置下&#xff0c;可提供时钟日历的功能。 修改计数器的值可以重新设置系统的当前时间和日期。 RTC模块和时钟配置系统…

uniapp项目实战系列(4):服务的异步请求,请求服务的二次封装

目录 系列往期文章&#xff08;点击跳转&#xff09;uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;uniapp项目实战系列(2)&#xff1a;新建项目&#xff0c;项目搭建&#xff0c;微信开发工具…

七、高并发内存池--Page Cache

七、高并发内存池–Page Cache 7.1 PageCache的工作原理 PageCache是以span的大小(以页为单位)和下标一一对应为映射关系的哈希桶&#xff0c;下标是几就说明这个哈希桶下挂的span的大小就是几页的&#xff0c;是绝对映射的关系。因为PageCache也是全局只有唯一一个的&#x…

线上批量查询物流导出到表格的操作指南

现在的生活中&#xff0c;我们经常需要查询包裹物流信息。如果一次性需要查询多个快递单号的物流信息&#xff0c;手动一个一个查询会非常麻烦。今天&#xff0c;我将向大家分享一个简单实用的方法&#xff0c;可以批量查询物流并导出到表格&#xff0c;方便随时查看。 首先&am…

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…

【USRP】集成化仪器系列1 :信号源,基于labview实现

USRP 信号源 1、设备IP地址&#xff1a;默认为192.168.10.2&#xff0c;请勿 修改&#xff0c;运行阶段无法修改。 2、天线输出端口是TX1&#xff0c;请勿修改。 3、通道&#xff1a;0 对应RF A、1 对应 RF B&#xff0c;运行 阶段无法修改。 4、中心频率&#xff1a;当需要…

LinuxUbuntu安装OpenWAF

Linux&Ubuntu安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识…

JDK源码解析-LinkedList

1. LinkedList类 1.1 LinkedList类定义&数据结构 定义 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列&#xff0c;它是基于双向链表实现的。 数据结构 基础知识补充 单向链表&#xff1a; element&#xff1a;用来存放元素 next&#xff1a;用来…

Redis 7 第六讲 主从模式(replica)

🌹🌹🌹 此篇开始进入高级篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…

FTP文件传输服务器

目录 一、FTP协议两种工作模式 二、FTP数据两种传输模式 三、FTP用户分类 四、VSFTP配置案例 4.1匿名开放模式 4.2本地用户模式 4.3虚拟用户模式 五、实验总结 一、FTP协议两种工作模式 主动模式&#xff1a; 1、客户端主动向ftp服务器发送控制连接&#xff0c;三次握手控制连接…

go锁-互斥锁

go锁-互斥锁 sema初始值是0&#xff0c;waitershift等待协程的数量 正常枷锁&#xff1a; 尝试CAS直接加锁&#xff0c;通过原子包给lockerd 为枷锁 若无法直接获取&#xff0c;进行多次自旋尝试&#xff0c;未获取到的锁的g &#xff0c;多次执行空语句&#xff0c;多次尝试…

线程同步与互斥

目录 前言&#xff1a;基于多线程不安全并行抢票 一、线程互斥锁 mutex 1.1 加锁解锁处理多线程并发 1.2 如何看待锁 1.3 如何理解加锁解锁的本质 1.4 CRAII方格设计封装锁 前言&#xff1a;基于线程安全的不合理竞争资源 二、线程同步 1.1 线程同步处理抢票 1.2 如何…

《QDebug 2023年8月》

一、Qt Widgets 问题交流 1.获取 QWidget 当前所在屏幕区域 本来以为 QWidget 的 screen() 接口返回的是组件自己所在屏幕的 QSreen&#xff0c;实测是所属 Window 所在的屏幕&#xff0c;如果 Window 跨屏了两者所属屏幕可能就不是同一个。 获取 QWidget 当前所在屏幕区域可…