自动化接口测试框架,如何替换获取token里的账号密码

说明:公司测试环境和预发布环境获取token信息里的账号密码不一样,如何替换? # 预发布环境密码是admin 测试环境密码是123456

class Util(BaseApi):
    def get_token(self):
        data = {
            "method": "post",
            "url": "http://192.168.2.153:31001/taps/api/v1/sso/auth/token/",
            "json": {
                "username": "admin",
                "password": "admin"    # 预发布环境密码是admin 测试环境密码是123456
            }
        }
        return self.send(data)['token']
class BaseApi:
    env = yaml.safe_load(open("../data/env.yaml"))

    def send(self, data):
        allure.attach(str(data), attachment_type=allure.attachment_type.TEXT)
        data["url"] = str(data["url"]).replace("192.168.2.153:31001", self.env["testing-studio"][self.env["default"]])
        return requests.request(**data).json()

image

admin改成123456不就好了吗

如果可以的话,我也不问了哇,试着换一个方式解决。

你的意思是根据yaml里面设置的环境自动换吗?

对对,已经替换了环境地址,不知道如何替换那个密码

加一个判断,然后根据判断结果修改json内容就好了啊。可以参考你修改url的内容呀

class BaseApi:
    env = yaml.safe_load(open("../data/env.yaml"))

    if env[default] == 'test':
        self.passwd = '123456'
    else:
        self.passwd = 'admin'

    def send(self, data):
        allure.attach(str(data), attachment_type=allure.attachment_type.TEXT)
        data["url"] = str(data["url"]).replace("192.168.2.153:31001", self.env["testing-studio"]
[self.env["default"]])
        data['json']['password'] = self.passwd
        return requests.request(**data).json()

可以把用户名密码也作为参数存到yaml里,每个环境去取自己对应的数据就好了

class BaseApi:
    env = yaml.safe_load(open("../data/env.yaml"))
    password = yaml.safe_load(open("../data/password.yaml"))

    def send(self, data):
        allure.attach(str(data), attachment_type=allure.attachment_type.TEXT)
        data["url"] = str(data["url"]).replace("192.168.2.153:31001", self.env["testing-studio"][self.env["default"]])
        data["json"]['password'] = str(data["json"]['password']).replace("cloudin123", self.password["testing-studio"][self.password["default"]])
        return requests.request(**data).json()
default: release
testing-studio:
  test: admin123
  release: cloudin123

这样不行 报错:

def send(self, data):
        allure.attach(str(data), attachment_type=allure.attachment_type.TEXT)
        data["url"] = str(data["url"]).replace("192.168.2.153:31001", self.env["testing-studio"][self.env["default"]])
>       data["json"]['password'] = str(data["json"]['password']).replace("cloudin123", self.password["testing-studio"][self.password["default"]])
E       KeyError: 'password'

../api/base_api.py:13: KeyError

Assertion failed

Assertion failed

Assertion failed

操作有点魔幻 我没太看懂。。。。
为什么还要replace 直接赋值不就挺好的 看报错你原本的data json下面就没有password 而且不管有没有 赋值不是更好么
比如

password:
  test: admin
  release: cloud

这样你在代码中只需要获取password[env] 就可以根据传入的env参数获取到对应的password值

可否贴一下代码,有点没太懂

吧yaml写成这种款式
image
读取的时候直接读取对应的test和release就行了,你上面的改改,然后代码里可以写一下对应的default是test还是release

你能再跟我说的详细一点嘛,BaseApi那里要怎么改

你把这张图和我上面的图结合起来看一看
image

还有嘛。下面的代码要如何写

接下来不就是正常流程了么。。。 :sweat:

方便加一下微信嘛,我还有几点疑惑 我的:p1104211831