首页 > 其他分享 >21.多套被测环境

21.多套被测环境

时间:2024-01-17 18:56:19浏览次数:14  
标签:httpbin 21 被测 self 环境 url base env 多套

多环境介绍

 
环境使用场景备注
dev 开发环境 开发自测
QA 测试环境 QA日常测试
preprod 预发布环境 回归测试、产品验测试
prod 线上环境 用户使用的环境

多套被测环境切换的意义和价值

 
  • 访问信息: 不同环境的域名或ip都不一样,部分产品Host也会有区别
  • 配置信息: DB、Redis、ES等中间件的配置信息不同环境也不一样
# 每条用例的url都是写死的,一旦切换环境,所有的用例都要修改。
r = requests.post("https://httpbin.ceshiren.com/post",
                    data=data)

实现目标

 
  1. 全局控制,一键切换
  2. 可维护性和扩展性强,可以应对不断演进的环境变化。
  • 环境管理
  • 环境切换

实现方案-环境管理

 
  • 使用环境管理文件
    • yaml
    • ini
    • 常量类
  • 使用不同的文件管理不同的环境
  • 在接口用例中只指定path,不指定url
# test.yaml 测试环境的配置
env_config:
  base_url: https://httpbin.org/
db_config:
  host: httpbin.org
  username:  xxxx
  password:  xxxx
redis_config:
  host: httpbin.org
  port: 8100
# dev.yaml 开发环境的配置
env_config:
  base_url: https://httpbin.ceshiren.com/
db_config:
  host: httpbin.ceshiren.com
  username:  xxxx
  password:  xxxx
redis_config:
  host: httpbin.ceshiren.com
  port: 8100

环境切换

 
  • 通过环境变量进行切换
  • 通过命令行参数进行切换

通过环境变量进行切换

 
  • 设置环境变量
  • 读取环境变量
# mac设置环境变量
export env=dev
# windows 设置环境变量
set env=dev
# 在python中读取环境变量
import os

import requests
import yaml


class TestMulitiEnv:
    def setup_class(self):
        default = os.getenv("env", default="test")
        data = yaml.safe_load(open(f"{default}.yaml"))
        self.env = data
        self.base_url = self.env["env_config"]["base_url"]


    def test_devenv(self):
        path = "/get"
        r = requests.get(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.org"

    def test_testenv(self):
        path = "/post"
        r = requests.post(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.ceshiren.com"

使用命令行进行切换

 

与《selenium 多浏览器处理》章节逻辑相同

participant 命令行参数 as command

participant 测试用例 as cases
participant 环境配置 as env
autonumber
command -> cases : 通过命令执行测试用例,通过参数指定环境
command -> env: 通过命令行参数获取指定的环境
cases -> env: 测试用例获取指定的环境。如果没有指定,那么就执行默认的环境
# conftest.py
global_env = {}

def pytest_addoption(parser):
    # group 将下面所有的 option都展示在这个group下。
    mygroup = parser.getgroup("hogwarts")
    # 注册一个命令行选项
    mygroup.addoption("--env",
     # 参数的默认值
    default='test',
    # 存储的变量
    dest='env',
    # 参数的描述信息
    help='设置接口自动化测试默认的环境'
     )

def pytest_configure(config):
    default_ev = config.getoption("--env")
    tmp = {"env": default_ev}
    global_env.update(tmp)
# test_muliti_env.py
class TestMulitiEnv:
    def setup_class(self):
        # 获取命令行配置的环境变量
        default = global_env.get("env", "test")
        data = yaml.safe_load(open(f"{default}.yaml"))
        self.env = data
        self.base_url = self.env["env_config"]["base_url"]

    def test_devenv(self):
        path = "/get"
        r = requests.get(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.org"

    def test_testenv(self):
        path = "/post"
        r = requests.post(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.ceshiren.com"

标签:httpbin,21,被测,self,环境,url,base,env,多套
From: https://www.cnblogs.com/csfsz/p/17970760

相关文章

  • leetcode 21.合并两个有序链表
    leetcode21.合并两个有序链表第二十一题:合并两个有序链表1.迭代:当l1和l2都不是空链表时,判断l1和l2哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。publicListNodemergeTwoLists(ListNodelist1,......
  • P2216 [HAOI2007] 理想的正方形 题解
    题目链接:理想的正方形比较明显的,我们可以用二维ST表解决,具体的二维ST表的实现,只需要知道一点:对于\(st[i][j][t]=max(i\simi+2^t,j\simj+2^t)\),表示的是如图所示的大正方形范围内的最值,它可以拆成从四个小正方形的左端点走\(2^{t-1}\)长的小正方形组成,预处理完直接查......
  • 已知IP地址是192.168.5.121,子网掩码是255.255.255.248,求网络地址和主机地址
    方法1首先,将Ip地址转换为二进制:192.168.5.121转换为二进制:11000000.10101000.00000101.01111001然后将子网掩码转换成二进制:255.255.255.248转换为二进制:11111111.11111111.11111111.11111000网络地址=IP地址&子网掩码192.168.5.121&255.255.255.248=192.168.5.12......
  • 代码随想录 day21 二叉搜索树的最小绝对差 二叉搜索树中的众数 二叉树的最近公共祖先
    二叉搜索树的最小绝对差二叉搜索树就是有序数组那么转换一下就很简单了也可以直接在遍历二叉搜索树的时候进行比较需要一个指针记录前一个节点二叉搜索树中的众数既可以把这题的二叉搜索树当成一般树来做这样就是层序遍历树然后用map记录频率再取频率最高的值这里用......
  • 2020-2021 ACM-ICPC Latin American Regional Programming Contest J. Job Allocator
    Preface今天因为下午被强行拉回老家了,而且没带电脑回去然后就变成了徐神和祁神两个人写,我拿个手机在后面口胡了3h最后变成了在缺我一个人的前提下还能4h过10题的情况,感觉就算我在的话最多就是快点过H然后把剩下的时间拿去写个J这场因为没啥参与就不写整场的博客了,把赛后写的这......
  • 大二打卡(12.21)
    uml作业:实现视图建模:(1)分析系统用例流程中对象间的交互“校园卡管理系统”包括“充值消费子系统”、“身份识别门禁子系统”、“校方卡片授权信息管理子系统”等。[用例流程描述]充值消费子系统:用户通过界面输入个人信息和充值金额,提交充值申请。系统验证用户身份和账户信息......
  • LY1087 [ 20230217 CQYC模拟赛VIII T2 ] 记忆
    我们来看这样一道题:请你维护一个序列\(a\)。1k将所有\(a_i\)变成\(|a_i-k|\)。2lr求\(\sum_{i=l}^{r}a_i\)。\(n,q\le10^5\)。首先我们不难写出一个\(naive\)的代码。#include<iostream>#include<algorithm>#include<cstdio>#include<arra......
  • CF1921F Sum of Progression
    题目链接:CF一道经典的类型题,把这种类型的题拿出来单独说一下。注意到问题中涉及到需要维护\(a_{x+k\timesstep}\)这样的信息,这样的信息很难用树型结构维护,比较容易用块级结构维护,我们注意到其实是每次这种步长\(+step\)的信息很难维护,我们考虑一类特殊的分块:如果\(step\)......
  • 2021 CSP-J
    2021CSP-JP7909分糖果(数学)题意给定\(n,l,r\),求一个数\(x\),当\(l\lex\ler\)时,最大的\(x\bmodn\)。数据规模与约定对于\(100\%\)的数据,\(1\len\lel\ler\le10^9\)。题解假设\(l=K_l*n+R_l,r=K_r*n+R_r,x=K_x*n+R_x\)。我们要求......
  • 2021 CSP-J
    P7909分糖果(数学)题意给定\(n,l,r\),求一个数\(x\),当\(l\lex\ler\)时,最大的\(x\bmodn\)。数据规模与约定对于\(100\%\)的数据,\(1\len\lel\ler\le10^9\)。题解假设\(l=K_l*n+R_l,r=K_r*n+R_r,x=K_x*n+R_x\)。我们要求\(R_x\)尽......