自动化脚本如何切换环境?Pytest这些功能你必须要掌握

news2024/11/26 2:38:47

在这里插入图片描述


文章目录

  • 一、前言
  • 二、安装
  • 三、使用
    • 第1种:使用方式是终端添加–base-url这个命令
    • 第2种:使用方式是在pytest.ini配置文件种去配置base_url,然后自动读取url的数据,这样就不用添加–base-url这个命令行参数了:
    • 第3种:pytest有个hooks函数,可以自定义命令行参数,一般在conftest.py中去引用。
    • 第4种:通过yml文件和fixture进行配合使用

一、前言

测试工程师每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,如何能让我们python语言写的测试用例可以自由切换到不同的环境下面去运行呢?

二、安装

pytest有一个插件叫pytest-base-url ,是管理base_url非常好的一款插件

pip install pytest-base-url

三、使用

第1种:使用方式是终端添加–base-url这个命令

pytest --base-url http://www.baidu.com works
#encoding=utf-8
import time
import requests
import pytest

name = "登录"
@pytest.fixture(scope="class")
def class_setup_teardown():
    print(f"\n============= {name} 接口测试开始! ==============")
    yield
    print(f"\n============= {name} 接口测试结束! ==============")


@pytest.mark.usefixtures("class_setup_teardown")
class TestWork:

    def test_work1(self,base_url):
        resp=requests.get(base_url)
        print(base_url)
        resp_code=resp.status_code
        assert resp_code==200

if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述

第2种:使用方式是在pytest.ini配置文件种去配置base_url,然后自动读取url的数据,这样就不用添加–base-url这个命令行参数了:

在这里插入图片描述

#encoding=utf-8
import time
import requests
import pytest

name = "登录"
@pytest.fixture(scope="class")
def class_setup_teardown():
    print(f"\n============= {name} 接口测试开始! ==============")
    yield
    print(f"\n============= {name} 接口测试结束! ==============")


@pytest.mark.usefixtures("class_setup_teardown")
class TestWork:

    def test_work1(self,base_url):
        resp=requests.get(base_url)
        print(base_url)
        resp_code=resp.status_code
        assert resp_code==200


if __name__ == '__main__':
    pytest.main()

运行命令:

pytest works

第3种:pytest有个hooks函数,可以自定义命令行参数,一般在conftest.py中去引用。

conftest.py中写pytest_addoption这个hooks函数,可以自定义命令行参数,base_url只能对一个url地址进行传递,那么有的项目不仅需要多项目请求的url地址进行不同环境的切换,还需要对mysql的url地址进行不同的切换,这个时候就可以用自定义命令,定义不同的命令行参数,这样我们在执行pytest的时候就可以自由进行传递。

conftest.py

import pytest
@pytest.fixture(scope='session',autouse=True)
def my1_fixture():
    print('----这是前置方法----')
    yield
    print('----这是后置方法----')



def pytest_addoption(parser):
    parser.addoption( "--test-url",
                      action="store",
                      default="http://www.baidu.com",
                      help="传递项目url"
    )

    parser.addoption("--produce-url",
                     action="store",
                     default="http://www.sogou.com",
                     help="传递数据库主机名称"
                     )

    parser.addoption("--develop-url",
                     action="store",
                     default="https://www.tencent.com/",
                     help="传递数据库主机名称"
                     )

# 获取 pytest.ini 配置参数
@pytest.fixture(scope="session")
def get_url(request):
    test_url = request.config.getoption('--test-url')
    produce_url = request.config.getoption('--produce-url')
    develop_url = request.config.getoption('--develop-url')
    print("\n读取到配置文件的测试url地址:%s" % test_url)
    print("\n读取到配置文件的生产url地址:%s" % produce_url)
    print("\n读取到配置文件的开发url地址:%s" % develop_url)
    return test_url,produce_url,develop_url

test_work.py

#encoding=utf-8
import time
import requests
import pytest

name = "登录"
@pytest.fixture(scope="class")
def class_setup_teardown():
    print(f"\n============= {name} 接口测试开始! ==============")
    yield
    print(f"\n============= {name} 接口测试结束! ==============")


@pytest.mark.usefixtures("class_setup_teardown")
class TestWork:

    def test_work1(self,get_url):
        resp=requests.get(get_url[0])
        print(get_url[1])
        resp_code=resp.status_code
        assert resp_code==200


if __name__ == '__main__':
    pytest.main()

在这里插入图片描述

第4种:通过yml文件和fixture进行配合使用

如果需要改环境,直接在con.yml中改参数即可(develop\test\produce)

在这里插入图片描述

conftest.py

import pytest
import yaml


@pytest.fixture(scope='session',autouse=True)
def my1_fixture():
    print('----这是前置方法----')
    yield
    print('----这是后置方法----')

@pytest.fixture(scope="session")
def config():
    with open(r'D:\project_development\api_pytest\conf.yml',"r",encoding="utf-8") as f:
        conf=yaml.load(f,Loader=yaml.FullLoader)
        return conf

@pytest.fixture(scope="session")
def env_vars(config):
    env=config["env"]
    mapping={
        "test":{
            "base_url":"http://www.baidu.com",
            "mysql_url":"127.0.0.1",
        },
        "develop": {
            "base_url": "http://www.sogou.com",
            "mysql_url": "127.0.0.2",
        },
        "produce": {
            "base_url": "http://www.tencent.com",
            "mysql_url": "127.0.0.3",
        },
    }
    base_url=mapping[env]['base_url']
    mysql_url=mapping[env]['mysql_url']
    return base_url,mysql_url


test_work.py

#encoding=utf-8
import time
import requests
import pytest

name = "登录"
@pytest.fixture(scope="class")
def class_setup_teardown():
    print(f"\n============= {name} 接口测试开始! ==============")
    yield
    print(f"\n============= {name} 接口测试结束! ==============")


@pytest.mark.usefixtures("class_setup_teardown")
class TestWork:

    def test_work1(self,env_vars):
        resp=requests.get(env_vars[0])
        print(env_vars[0])
        print(env_vars[1])
        resp_code=resp.status_code
        assert resp_code==200


if __name__ == '__main__':
    pytest.main()


在这里插入图片描述

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

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

相关文章

最优二叉搜索树问题(Java)

最优二叉搜索树问题(Java) 文章目录最优二叉搜索树问题(Java)1、前置介绍2、算法设计思路2.1 最优二叉搜索树的结构2.2 一个递归算法2.3 计算最优二叉搜索树的期望搜索代价3、代码实现4、复杂度分析5、参考资料1、前置介绍 设S{x…

R语言探索 BRFSS 数据和预测

加载包 library(ggplot2) library(dplyr) library(Hmisc) library(corrplot) 加载数据 load("brfss2013.RData") 第1部分:关于数据 行为风险因素监测系统(BRFSS)是美国的年度电话调查。BRFSS旨在识别成年人口的风险因素并报告…

docker启动出现Error response from daemon: Cannot restart container的报错

1、发现问题 突然发现启动(重启)容器的时候报这个错 Error response from daemon: Cannot restart container 容器id: driver failed programming external connectivity on endpoint 容器名 (容器id): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --…

图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets

文章目录3. Super-Resolution by Predicting Offsets3.1. 这篇论文用于处理栅格化图像的超分,不知道这样翻译对不对,3.2. 作者认为栅格图像的边缘比较规则,可以训练一个offset map移动栅格图像的 边缘点(背景和前景像素 移动 和交…

能率携手梦想改造家,打造适老化住宅新典范

家装改造类节目《梦想改造家》第九季温情回归,日本一级建筑设计师本间贵史携手知名燃热品牌能率,与节目组一起关注民生,走进由一家五口组成的“足不出户的家”,共启老宅改造计划,倾情助力普通家庭拥抱生活与梦想&#…

(Matlab实现)蚂蚁狮子优化算法在电力系统中的应用

目录 1 知识一网打尽 2 蚂蚁狮子优化算法在电力系统经济调度中的应用 3 运行结果 4 Matlab代码实现 1 知识一网打尽 这里总结一位博主的电力系统经济调度目录 蚂蚁狮子优化算法(完整Matlab代码实现) 多目标蚂蚁狮子优化算法(Matlab代码…

拒绝灵感焦虑,藏在UI设计师书签里的宝藏网站!

都在说UI设计“越来越吃香”,导致其他门类的设计师一心想转行。 上次和入行8年的UI大佬聊天,她告诉小摹3条UI设计师必备能力: 审美能力和眼界:一个界面好不好看最后都是UI来定,为了不背锅,UI一定要有国际流…

dolphinscheduler2.0.5性能手动测试

目录🐬官方配置文件说明🐬测试并发量🐠线程数量设置100🐠线程数量设置200🐠线程数量设置500🐬测试结论🐬官方配置文件说明 官方说明 master.exec.threads: master工作线程数量,用于…

【2013】408联考数据结构真题整理

2013年 1 题目 解析 原始:升序 升序 变 升序 尾插法 改编:升序 升序 变 降序 头插法 2 题目 答案:C 解析 3 题目 答案:B 解析 二叉排序树,或者是空树,或者是满足以下性质的二叉树: …

基于PHP+MySQL音乐网站的设计与实现

随着时代的发展,音乐已经逐渐成为了人们生活中必不可少的一种调剂品,人们对音乐的追求也越来越强烈,为此我通过PHP和MYSQL开发了本音乐网站 本音乐网站是一个综合性的音乐分享网站,它主要实现了娱乐新闻,上榜歌手,音乐试听,音乐下载,下载排行,音乐库,在线留言等基本的音乐共享功…

Matplotlib绘制折线图、散点图、柱状图、直方图、饼图代码

一、折线图 以折线的上升或下降来表示统计数量的增减变化的统计图 特点:能够显示数据的变化趋势,反映事物的变化情况(变化)函数:plt.plot(x, y) import matplotlib.pyplot as plt import randomfrom pylab import mpl mpl.rcParams["f…

day31 文件上传js验证mimeuser.ini语言特性

前言 #知识点: 1、文件上传-前端验证 2、文件上传-黑白名单 3、文件上传-user.ini妙用 4、文件上传-PHP语言特性 #详细点: 1、检测层面:前端,后端等 2、检测内容:文件头,完整性,二次渲染…

基于MATLABsimulink的《电路原理》课程仿真实验平台开发

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1选题背景及意义 1 1.2设计内容 1 1.3设计思想 2 第二章 MATLAB简介 3 2.1 MATLAB程序设计 3 2.2 Simulink仿真 4 2.2.1 Simulink 启动 4 2.2.2 Simulink 模块库及模块操作 4 2.2.3 仿真参数设置 6 2.3图形用户界面(GUI&…

基于STM32的温控风扇

本设计是基于STM32的温控风扇,主要实现以下功能: 温度控制风速,四个挡位,停止、低速、中速、高速 按键可切换模式,可手动切换挡位,四个挡位,停止、低速、中速、高速 按键设置温度值&#xff0c…

网络刷卡器开发,刷新移动物联新生活

在物联网应用需求和身份校验普及的影响下,沐渥自主研发生产了一款基于网络协议传输的读卡设备——网络刷卡器,这是一款体积小巧,方便携带,即插即用,无需安装驱动,采用USB通讯,即刻响应对接客户的…

Linux系统漏洞本地提权

目录 一、实验项目名称 二、实验目的 三、实验内容 四、实验环境 五、实验步骤 六、实验结果 七、实验总结 一、实验项目名称 Linux系统漏洞本地提权及跳板设置实验 二、实验目的 1.msf工具的使用; 2.“脏牛”漏洞CVE-2016-5195漏洞利用方法。 三、实验…

MCE | 铁死亡——调节性细胞死亡

多细胞生物中,调节性细胞死亡过程 (RCD) 是细胞维持组织形态和功能必不可少的稳态机制。此前研究较多的调节性细胞死亡包括三大类:细胞凋亡、自噬和坏死。 “铁死亡”这一概念最早在 2012 年由 Dr. Brent R Stockwell 提出,它是一种铁离子依赖…

ORM概念

ORM概念 ORM是Object Relational Mapping 对象关系映射。简单来说,就是把数据库表和实体类及实体类的属性对应起来,让开发者操作实体类就实现操作数据库表。 ORM(Object Relation Mapping)对象关系映射 思想:将关系数据库中表中的记录映射为对…

百货集团数字化转型方案

一、案例简述 后疫情时代对零售业,特别是百货和购物中心造成了巨大冲击,驱使实体零售业拥抱数字化转型。从总体上看,实体零售企业对于数字化转型的必要性已有充分的认知及一定的实践操作,但数字化仍处于起步阶段,线上…

”消费全返“是割韭菜,非也,广告电商引领全新“全返”模式

谈及消费全返,大家可能会避而不谈,因为有“云联惠”这个实实在在的案例发生,各大企业都怕进局子,现在都不弄消费全返了。说到“云联惠”,为什么它能在短时间内火得这么快,因为他们以“全返”为阙头&#xf…