zoukankan      html  css  js  c++  java
  • 测试平台系列(42) 编写数据构造器功能(下)

    大家好,我是米洛,一个测试开发博主!

    如果阅读完毕后想和作者有更多交流,可以点击阅读原文找到底部评论区,给作者留言啦!

    欢迎大家关注我的公众号: 测试开发坑货

    回顾

    上篇已经编写了添加数据构造器的相关方法,现在我们就来运动到用例中去。

    编写根据case_id查询所有构造器方法

    这里是为了找出我要运行的case的所有数据构造方法

    编写查找数据构造器方法

    • ConstructorDao添加static方法

    不为别的,因为我们如果判断case有数据构造数据,那我们就要获取到这个数据呀!

    改造Executor类

    • 新增解析参数的方法

    还记得之前我们全局变量替换变量的内容吗?当时是只替换headers,body等内容,其实不太全面。

    一个TestCase类,里面有太多字段了。我们取数据以后,每个字段都需要check一遍,所以这里遍历一个testcase的所有字段,去里面挖掘变量,这样会最全面。(效率也会比较低,但是由于我们的数据构造器只告诉了返回,并没告诉具体在哪用,所以这样的过程是有必要的)

    这里有个特例,request_header我们本身已经是处理为json字符串了,所以里面的数据天然是字符串,我们不需要进行一次序列化

    • 尽管装饰器自动生成了不少日志,但是还是不够

    我们需要可以手动写入日志的功能,于是封装了append方法

    • 新增获取构造数据和执行构造数据方法

    可以看到,目前构造器只支持了type == 0也就是测试用例类型。如果是case类型,那么Executor会再次生成一个,去执行用例中的用例,最终拿到result信息,并根据我们设定的value,把case执行的数据全部塞给传递进来的params字典。

    这个过程就记录了所有构造条件里面的数据,为将来取数据做好了铺垫。

    改造run方法

    新增了3个参数,分别是params_pool,request_param和path。

    解释一下:

    • params_pool

      这个是总体的全局的数据池,从第一个用例开始积累,所以我们约定,不要填写重复的返回值

      比如构造器1返回变量value1,构造器2返回变量value2,那最终这个params_pool的内容会是:

    {
      "value1": value1返回数据,
      "value2": value2返回数据
    }
    
    • request_param

      在上一篇漏掉了个内容,我们有一个动态参数的字段。因为我们用例参数如果写死会很难用,所以我们要让用例动起来,而不是死数据,但又不是全局变量那么刻板。

      所以我们需要让用例能接受对应的数据去执行,比如一个登录用例,里面写了用户名是abc,这里我传入我这个场景需要的用户woody就可以达到通过参数修改用例的目的

    • path

      这个很好理解,我的case路径。比如我是A用例,在执行A的构造条件1->B用例,那么为了不让我凌乱,我会给出一个path:

      A->B, 这样就会比较好区分。

      再讲讲用例的细节,我们按照step(注释有写)将用例过程拆分,这样思路就很清晰了。

    回到最初的例子

    我们还是得先登录,再通过JSESSIONID去请求获取用户列表接口的。

    我们应该怎么做呢?

    1. 编写一个登录用例

    编写用例基本信息

    header信息

    body信息

    测试一下:

    测试成功,能够正常登录

    1. 把登录用例添加为查询所有用户列表的数据构造器

    2. 取数据

    我们登录后,需要用到cookie里面的JSESSIONID。

    注意这里,我们把登录后的变量设置为了blog_login,通过cookies.JSESSIONID拿到对应的数据,并传递给当前用例。

    看看效果:

    成功拿到response

    由于日志不太友好,后续还得改造。断言也没有添加,还需努力呀!

    如果修改或者写错这个变量:

    故意写错SESSIONID

    可以看到变量替换失败了

    登录凭证没有获取到,自然就登录失败了!

    在线演示地址: http://test.pity.fun/

    前端代码仓库: https://github.com/wuranxu/pityWeb

    后端代码仓库: https://github.com/wuranxu/pity

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/we8fans/p/15286745.html
Copyright © 2011-2022 走看看