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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 疫情之下,远程办公成为全球企业刚需,Zoom会议软件3月日活跃用户达2亿,相比去年底激增20倍;春节过后国内开展远程办公的企业超过1800万家,远程办公人员超过3亿人,钉钉在1个月内下载量超过11亿人次,半数中国工作人口都参加了这场全民远程办公。远程办公凭借能提升办公协作和管理效率、减少人群夹出风险等特点,成为当下企业安全复工复产的重要方式。如果说“非典”奠基了中国电商行业的黄金时代,那么新冠疫情则开启了全球远程办公的发展新纪元。远程办公,指基于互联网、物联网、云计算等技术,通过第三方插件、软件、网站等工具,实现异地、移动等非本地办公。与传统集中办公相比,远程办公可以建立网络环境,超越时空和地...
            0 0 3398
            分享
          •   一、等价类划分法  等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格即可。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。  等价类思考步骤:  1、先确定有效和无效等价类。  2、有效等价类就是题目条件(两端的极值(边界值)要判断,中间随意一个值也要判断)。  3、无效等价类先划分与条件相反的情况,其它特殊情况(中文、英文、特殊符号、空格、空值)。  二、边界值  具体测试用例思路:找到边界值和它两端的值,分别进行测试。  1、确定边界情况(输入或输出等价类的边界)。  2、选取正好等于、刚刚好大于或刚刚好小...
            0 0 3026
            分享
          •   入行半年开始带团队,然后从几个人到几十个人到上百号人,做了有差不多九年的管理。对于软件测试从技术向上转型到测试管理角色,主要还是以下几个点:  一、技术  软件测试本身是技术岗,要升职必须要有较为扎实的技术能力,不然招进来的人技术比你强,你无法在工作中给出关键性指导和建议,会让下级对你产生不服,进而导致人员管理上难度增加。  二、个人综合素养  管理层,还需要有相对好一点的综合素养,比如说职业化(良好的结果反馈机制)、沟通能力(清晰表达与接收对方观点)、大局观(清晰的未来规划能力)。  三、横向能力  除去上述的这些基本之外,作为管理者,还需要有较好的横向能力,比如说部门在规划时的人员配比...
            0 0 78
            分享
          •   这是个很有意思的话题,我一开始画了这么一张图:  就我自身的工作而言,用着开发的技术,做着开发差不多的工作。归为开发一类并无不妥!  后来,我细细琢磨了一下,改为了下图。  其实答案也非常明显:不管是做自动化的测试,还是开发工具/平台的测试,又或者做着基层管理工作的测试,大家的身份认同应该首先还是“测试工程师”。  那么,这么明显的问题,为什么还会有人来讨论。  早期的测试职位定位非常清晰,至少在我2010年刚做测试的时候,每天关注的话题是测试方法、用例设计、测试计划、测试报告,如何使用bugfree、禅道、bugzilla、QC 这类工具,高级一些的话题是UI自动化、性能测试。大部分情况...
            0 0 142
            分享
          •        近年来应用安全越来越受到企业的重视,安全测试的需求也随之激增。那么上手安全测试该了解哪些基础知识点呢?在这里我对常见的安全测试点进行了梳理,希望通过此文能够帮助大家普及安全测试中最常见的知识点!更希望此文能够起到抛砖引玉的作用,激发大家不断探索安全测试领域的热情!sql注入       威胁解读:Sql注入就是通过利用一些查询语句的漏洞,将sql语句传递到服务器解析并执行的一种攻击手段。当不可信的数据作为命令或查询语句的一部分被发送给解释器的时候,会发生注入漏洞,包括SQL、NoSQL、OS以及LDA...
            0 0 1827
            分享
      • 51testing软件测试圈微信