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

前提

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

技能点

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

代码实现

shell 复制代码
# 目录结构
|----pytest.ini
|
|----conftest.py
|
|----data
|    |
|    |----userinfo.py
|
|----case
     |
     |----monitor_sample
             |
             |----conftest.py
             |
             |----test_monitor_sample.py
ini 复制代码
# content of pytest.ini
[pytest]
markers = test: test environment
            prod: product environment
python 复制代码
# 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
python 复制代码
# 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
python 复制代码
# 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
python 复制代码
# 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获取命令行功能判断出是希望在测试执行还是生产执行,更新变量状态;全局变量保存两套环境配置信息,根据命令行参数进行筛选。

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

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

相关推荐
l1t12 分钟前
JIT执行python脚本的工具codon安装和测试
开发语言·python
程似锦吖32 分钟前
无中生有 之 从0开始写一个动态定时任务管理
java·开发语言
2501_9010064738 分钟前
Golang怎么用gRPC Gateway_Golang gRPC Gateway教程【经典】
jvm·数据库·python
2501_9012005339 分钟前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
2401_867623981 小时前
如何解决OUI图形界面无法调用_xhost与DISPLAY变量设置
jvm·数据库·python
Dxy12393102161 小时前
Python 去除 HTML 标签获取纯文本
开发语言·python·html
2401_824697661 小时前
CSS如何实现元素反转特效_使用transform-scaleX(-1)操作
jvm·数据库·python
CLX05051 小时前
如何在 WordPress AMP 网站中为特定模板禁用 AMP 渲染
jvm·数据库·python
砚底藏山河1 小时前
python、JavaScript 、JAVA,定制化数据服务,助力业务高效落地
java·javascript·python
神明9311 小时前
如何实现SQL动态字段选择查询_利用反射或动态拼接字符串
jvm·数据库·python