27、pytest实战:一套用例同时验证生产、测试两个环境

news2024/11/23 11:23:41

前提

  • 生产与测试环境接口地址相同,只是域名不同,例,生产环境为http://192.168.1.40,测试环境为http://192.168.1.50
  • 生产环境有严格要求,只允许查询操作,不允许进行增删改;测试环境可进行所有操作。

技能点

  • 获取命令行入参argv
  • pytest的mark标记

代码实现

# 目录结构
|----pytest.ini
|
|----conftest.py
|
|----data
|    |
|    |----userinfo.py
|
|----case
     |
     |----monitor_sample
             |
             |----conftest.py
             |
             |----test_monitor_sample.py
# content of pytest.ini
[pytest]
markers = test: test environment
            prod: product environment
# content of root conftest.py
import pytest

@pytest.fixture
def cmdopt(request):
	return request.config.getoption("--env")
    
    
def check_prod_env():
	try:
		if '-m' in sys.argv[1:]:
			index = sys.argv[1:].index('-m')
			if sys.argv[1:][index+1] == 'prod':
				return True
		return False
	except:
		return False
# content of userinfo.py
import time
import sys

project_info = {
	'test':{
		'app_base_url':'http://192.168.1.50',
		'user_info':{
			'管理员':('testuser','testpassowrd'),
		},
		'database_info':{
			'url':'',
			'username':'',
			'password':'',
			'port':3306,
			'db_name':{
				'测试创新应用':'',
			}
		}
	},
	'prod':{
		'app_base_url':'http://192.168.1.40',
		'user_info':{
			'管理员':('produser','prodpassword'),
		},
		'database_info':{
			'url':'',
			'username':'',
			'password':'',
			'port':3306,
			'db_name':{
				'生产创新应用':'',
			}
		}
	}
}

def check_prod_env():
	try:
		if '-m' in sys.argv[1:]:
			index = sys.argv[1:].index('-m')
			if sys.argv[1:][index+1] == 'prod':
				return True
		return False
	except:
		return False
# content of app dir conftest
import pytest
from data.userinfo import *

@pytest.fixture()
def get_app_url():
    token_dict = {}
    env_str = 'test'
    if check_prod_env():
        env_str = 'prod'
    app_base_url = project_info[env_str]['app_base_url']
    return app_base_url
# content of test_monitor_sample.py
import pytest

class TestMoitorSample():
    '''
    测试实例应用,查询、更新功能
    '''
    
    @pytest.mark.prod
    @pytest.mark.test
    def test_monitor_sample_search_data(self,get_app_url):
        '''
        测试查询数据功能
        :param get_app_url:
        :return:
        '''
        print("查询数据,获取应用地址为:{}".format(get_app_url))
        assert 1


    @pytest.mark.test
    def test_monitor_sample_insert_data(self,get_app_url):
        '''
        测试更新数据功能
        :param get_app_url:
        :return:
        '''
        print("插入数据,获取应用地址为:{}".format(get_app_url))

场景应用

利用mark标志可用于筛选哪些用例在测试环境运行,哪些在生产环境运行;利用python获取命令行功能判断出是希望在测试执行还是生产执行,更新变量状态;全局变量保存两套环境配置信息,根据命令行参数进行筛选。

执行测试环境用例并打印输出

在这里插入图片描述

执行生产环境用例并打印输出

在这里插入图片描述

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

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

相关文章

【【FPGA 之 MicroBlaze XADC 实验】】

FPGA 之 MicroBlaze XADC 实验 Vivado IP 核提供了 XADC 软核,XADC 包含两个模数转换器(ADC),一个模拟多路复用器,片上温度和片上电压传感器等。我们可以利用这个模块监测芯片温度和供电电压,也可以用来测…

Elasticsearch 入门(postman学习)-01

HTTP-索引-创建 对比关系型数据库,创建索引就等同于创建数据库。 在 Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/shopping 请求后,服务器返回响应: {"acknowledged": true,//响应结果&…

C# 雪花算法生成Id工具类

写在前面 传说自然界中并不存在两片完全一样的雪花的,每一片雪花都拥有自己漂亮独特的形状、独一无二;雪花算法也表示生成的ID如雪花般独一无二,该算法源自Twitter。 雪花算法主要用于解决分布式系统的唯一Id生成问题,在生产环境…

科普|直流负载的工作方式有哪些

直接供电方式:这是最常见的直流负载工作方式,即直流电源直接为负载提供电能。例如,电池、太阳能电池板等可以直接为电动玩具、手电筒等直流负载提供电能。 间接供电方式:这种方式是通过交流电源转换为直流电源后,再为直…

基于Java SSM框架实现文物管理系统项目【项目源码+论文说明】

基于java的SSM框架实现文物管理系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&#…

2023美图创造力大会开幕,美图发布AI视觉大模型4.0

12月5-6日,主题为“未来AI设计”的美图创造力大会(Meitu Creativity Conference,简称MCC)在厦门举行。 本届大会由美图公司与站酷联合举办,聚焦于设计师生态和AI设计趋势。大会现场发布《2023年度AI设计实践报告》&am…

Windows 上安装nvm node版本管理工具 windows安装nvm 管理工具

Windows 上安装nvm node版本管理工具 windows安装nvm 管理工具 1、nvm2、安装2.1、下载 NVM 安装程序进行安装2.2、打开nvm的安装路径,运行终端测试是否安装成功2.3、配置环境变量,让nvm能在电脑全局使用2.3.1、nvm配置淘宝镜像2.3.2、nvm环境变量设置 1…

图像识别经典轻量级网络模型总结梳理、原理解析与优劣对比分析

在前面的很多博文中,我们不止一次提到过,在实际业务项目开发过程中,我们会经常使用到轻量级的网络模型,本文主要是总结梳理前面经常使用到的一些轻量级的图像识别模型。 【MobileNetv1】 MobileNetv1 是一种轻量级的卷积神经网络&…

(十四)Flask之闪现flash

闪现—flash 这可不是LOL或是王者荣耀里的闪现哦~ Flask 中的 “闪现”(flash)是一种在请求之间传递消息的机制。它允许你将一条消息保存在一个请求中,在下一个请求中获取并显示该消息,然后立即将其删除【设置完之后阅后即焚&am…

『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium

『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium 1 关于Android UI自动化测试2 Appium简介3 Appium原理3.1 Android端过程3.2 iOS端过程 4 补充内容5 JDK下载6 JDK配置7 SDK下载8 SDK配置9 配置Android环境10 安装NodeJs11 解决node安…

MyBatis 常见面试题

目录 1.MyBatis——概述1.1.什么是 ORM 框架?1.2.✨谈谈对 MyBatis 的理解。1.3.使用 MyBatis 相对于直接使用 SQL 有哪些优点?1.4.MyBatis 有什么优缺点?1.5.✨MyBatis 的分层结构是什么样的?1.6.✨MyBatis 的执行流程是什么样的…

echerts 循环图 显示获取不到id

报错:Uncaught TypeError: Cannot read properties of null (reading getAttribute), 我所出现的问题是 1,我在循环方法的时候 id没有从0开始,把id变成从0开始循环 2,设置myChart 全局属性 呈现效果 代码 html 动态绑…

Web开发-问题-前后端交互数据不一致

0x01 问题描述 所用的技术:VueSpring Boot后端传给前端数据: [Student(studentId1, personorg.fatmansoft.teach.models.Person4abe6020, major软件工程, className一班, grade一年级), Student(studentId2, personorg.fatmansoft.teach.models.Person…

Ant Design Vue(v1.7.8)a-table组件的插槽功能

<template slot"unitShow" slot-scope"text, record"> slot"unitShow" 表示插槽名&#xff08;见具名插槽&#xff09; slot-scope"text, record" 表示作用域插槽接收从<a-table>组件传递进来的两个参数&#xff0c;其中…

回溯算法:复原IP地址 子集 子集II

93.复原IP地址 思路&#xff1a; 与分割回文串相似&#xff0c;复原ip地址是将给定字符串分割成点分十进制的四段&#xff0c;切割问题就可以使用回溯搜索法把所有可能性搜出来。回溯三部曲&#xff1a; 递归参数&#xff1a;除了传入的需要分割的字符串&#xff0c;仍然需要…

介绍几个有意思的 GitHub 仓库

大家好&#xff0c;我是风筝。 今天介绍几个很有意思的 github 开源项目&#xff0c;看过之后就会发现&#xff0c;github 果然深意暗藏。 GitHub对于程序员来说&#xff0c;再熟悉不过了&#xff0c;绝大多数时候&#xff0c;我们到上面都是为了学习高质量的源代码&#xff…

Windows循环检测,直到网络通/断后执行指定命令

前言 前几天&#xff0c;一个朋友让我帮他做个脚本或者批处理&#xff0c;要实现的功能很简单&#xff1a;开机时检测网络是否联通&#xff0c;如果联通了就执行一个指定的程序&#xff0c;然后脚本就可以退出了。 批处理的解决方法 手动操作时&#xff0c;我们通常使用ping…

【hacker送书第9期】算法训练营(入门篇)

第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式&#xff0c;详细讲解常用的数据结构与算法&#xff0c;又融入大量的竞赛实例和解题技巧。通过对本书的学习&#xff0c;读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…

HarmonyOS鸿蒙操作系统架构

目录 1. 分布式架构&#xff1a; 2. 统一的开发平台&#xff1a; 3. 多内核共享&#xff1a; 4. 自适应界面&#xff1a; 5. AR、VR、MR支持&#xff1a; 6. 安全和隐私保护&#xff1a; 7. AI集成&#xff1a; 8. 应用生态系统&#xff1a; 9. 开源和开放&#xff1a…

Maxwell学习笔记

1 概述 Maxwell 是由美国 Zendesk 开源&#xff0c;用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog&#xff0c;并生成 JSON 格式的消息&#xff0c;作为生产者发送给 Kafka&#xff0c;Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台…