• 0
  • 0
分享
  • 学会这个Pytest函数,轻松切换自动化测试环境!——软件测试圈
  • 曼倩诙谐 2023-08-07 14:07:42 字数 3067 阅读 847 收藏 0

  前言

  在目前互联网公司中,都会存在多个测试环境,那么当我们编写的自动化想要在多套测试环境下进行运行时,如何使用?

  大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境。

  但是这时候就会增加一些工作量,每次运行不同的环境,都需要在配置文件中进行地址修改,这样很不方便。

  今天小编介绍一种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('传参失败!')

1-1.png

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

1-2.png

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

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

1-3.png

  案例展示

  上述小编是介绍了如何使用,那么我们如何在接口项目中使用呢?小编这里通过一个简单的方法通过项目进行展示,这里小编通过将默认值值变成了请求成功的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进行运行程序,我们先不添加任何命令行参数,让其请求默认参数值的内容,发现测试用例请求成功了。

1-4.png

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

1-5.png

  总结

  小编通过简单的方法介绍了如何使用pytest_addoption进行来模拟不同测试环境下,我们如何进行执行我们的测试用例。

  当然pytest_addoption的用途不仅仅只有这么多,具体如何使用,大家可以根据自己公司内容的项目进行结合使用。

  感谢您的阅读,希望本篇文章对您有所帮助。


作者:测试安静    

来源:http://www.51testing.com/html/82/n-7796882.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、DHCP服务(动态主机配置协议)1.背景手动设置工作量大且容易冲突;用DHCP可以减少工作量和避免地址冲突。2.概述作用:为局域网内的电脑分配IP地址架构 C/S;客户端/服务器模式实现方式:为相同网段的电脑分配IP地址—DHCP跨网段为另一网段的电脑分配IP地址—DHCP中继DHCP使用UDP协议,67号是客户机使用的,68号是服务器端的端口号3.优点减少管理员的工作量;避免输入错误的可能;避免IP地址冲突;当更改IP地址段时,不需要重新配置每个用户的IP地址;提高了IP地址的利用率;方便客户端的配置。4.DHCP报文类型以找工作为例:DHCP Discover——客户端用来寻找DHCP...
            14 14 1026
            分享
          •   应届生,没有实际项目经验怎么破?  面试的过程并不为为了显示面试官技术有多牛,也不是为了体现他们公司有多么难进而是考察你的能力和招聘需求是否相匹配,进而评估你能否满足工作需求,甚至实现更多的岗位期待。  弄清楚了这个核心,那么就只需要把控好两方面的内容:  1、自己的技能水平可以满足招聘需求  2、表达能力OK  围绕上面的核心,咱们来具体的聊一下:  首先来说,目前的行业招聘现状是:  ·测试行业底层在不断洗牌  · 初级人员薪资一直维持不变(相当于降薪)  · 已经不再是公司疯狂招人的阶段  所以就导致了明显的两极分化,大厂倾向于直接招测试开发,测试团队进一步精简,...
            0 0 737
            分享
          • 前言Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备。正文首先声明,Spring Boot不是一门新技术,所以不用紧张。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring...
            0 0 680
            分享
          • 概述记得2019年,微信支付出过一个故障,用户发起支付给了钱后,微信一直不回调,导致使用了微信支付的商家的订单都成了未支付状态了,如果业务系统设计的不好,那瞬间就会有大量的客诉出现。像下面的对话场景,我相信当时肯定非常的多:用户:我支付了好几次了,你说你没收到?别开玩笑了。 商家:我这边真的没收钱。然后心想:这家伙不会是想吃霸王餐吧?虽然像微信和支付宝这样的大牌支付平台,出大故障的几率比较少,但是也不得不防。下面列举几个支付问题以及对应的解决思路。第三方支付平台无法支付以微信为例子,像2019年微信支付出故障时,美团那边,是在APP侧,立刻将微信支付置灰了,引导用户使用支付宝支付,将损失和影响...
            0 0 2636
            分享
          • 虽然现在 Git 已经很普及,但是我相信用 SVN 的公司仍然不少,那么作为 SVN 配置管理员的话,就不可避免的涉及到账号维护的问题,今天我们就说说如何通过 Python 脚本实现用户的快捷维护。 如果手动维护用户,一般需要三个步骤:1.手动添加用户2.手动设置属组3.通知用户设置结果 使用脚本后也是三步,但是效率却大大提升:1.输入用户名2.输入要设置的组名3.按下回车,搞定 这里面设置用户和属组是关键点,也是我们需要自动化起来的操作,下面分别给出实现的代码: def add_user(user_name): """如果用户不存在则调用htpasswd.exe添加用户""" ...
            1 2 2375
            分享
      • 51testing软件测试圈微信