专栏文章 测试提效 - 随性造数自动化脚本

simonpatrick · 2023年02月12日 · 最后由 陈恒捷 回复于 2023年02月17日 · 6127 次阅读

测试提效 - 随性造数自动化脚本

野路子测试开发当严肃的说我们要一个造数据平台的时候,chrome 悄悄帮他做了一半.

源起 - 造数据需求

今天做功能测试,遇到一个问题场景是这样的:

  1. 需要 10 个新用户,密码都知道
  2. 这 10 个用户需要绑定到另外一个用户,需要绑定 10 次
  3. 10 个新用户都需要进行一个流程申请,要填不少内容

想来想去,这个本来是造数平台可能帮你做,可以小公司那有什么造数平台,
自己做,只能一个一个创建,又有点麻烦; 那怎么办?

方法其实说来话长,写上接口调用代码,考虑是 get 还是 post,请求数据有哪些,然后再用执行引擎,可以连续调用接口组合成流程,然后再做成造数平台,有界面可以操作,然后........

心有不甘和纠结

可是兄弟,远水解不了近渴呀? 算了, 还是自己手工建吧,心有不甘的我, 有没有更好一点的办法呢?chrome 不是有复制请求功能吗?

  • curl 用过, 想了一下这条路可行, 写 shell 循环,替换某个值,直接循环不同的用户名称就可以
  • fetch 是 nodejs 版本的发送请求工具, 那也好办,那就用上 nodejs, 开一个项目,用上 fetch 做一下循环

又一村

但是最熟的还是 python,用 python 可以做吗?可以肯定可以,就是花点时间,有这个时间我可能手工都做好了,那我写还是不写?还是手工创建?那用 nodejs 复制出来的代码还是 python 自己写一下? 直到我把 chrome copy 出来的 fetch 代码一看:

fetch("https://api.github.com/_private/browser/stats", {
  "headers": {
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9",
    "content-type": "text/plain;charset=UTF-8",
    "sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"macOS\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "no-cors",
    "sec-fetch-site": "same-site"
  },
  "referrer": "https://github.com/",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "{\"stats\": [{\"longTasks\":[{\"name\":\"self\",\"duration\":212,\"url\":\"https://github.com/\"}],\"timestamp\":1676042687902,\"loggedIn\":true,\"staff\":false,\"bundler\":\"webpack\"}] }",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

以上代码只是例子,不代表真实场景,果然是 js 代码呀,fetch,python 里面没有这个方法的。
突然,突然,我嘿嘿了一下,那 python 里面写一个函数叫 fetch,那我不是什么数据都不用改了, 这这,动手:

def fetch(url: str, req: Dict):
    """
    for coping fetch style code in chrome
    """
    return httpx.request(
        url=url, method=req["method"], data=req["body"], headers=req["headers"]
    )

瞬间 fetch 好了,那直接复制出来的就能用, 然后就是循环了, 代码结构如下:

request = {} ## 复制出来的代码

  body_tmp = '{}'
  names = [
      "name_1",
      "name_2",
      "name_3",
      "name_4",
  ]
  for name in names:
      print(request["body"])
      request["body"] = body_tmp.replace("#NAME", org)
      print(request)
      result = fetch(
          "url",
          request,
      )
      print(result)

然后呢, 手工建好一个用户之后,做了稍微修改,10 个用户和绑定就瞬间做好了.

代码省下的一点时间休息一下, 虽然都是胶水代码,但是最少还是有手工创建 10 个用户,10 个绑定,10 个申请还是值得了,有点小技能也提高了下.

然后呢,随性造数自动化脚本就结束了,chrome 其实也算半个造数平台了.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

数据驱动了解下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册