美文网首页百人计划自动化测试
【接口/性能】HttpRunner02-用例分层

【接口/性能】HttpRunner02-用例分层

作者: JOooo_ | 来源:发表于2018-02-08 15:01 被阅读100次

    1. HttpRunner安装

    pip install httprunner

    可在git上下载源码:https://github.com/HttpRunner/HttpRunner

    2. 背景

    在HttpRunner中,测试用例引擎最大的特色就是支持YAML/JSON格式的用例描述形式。

    不过,问题在于,接口通常会出现在多个测试场景中,而每次都需要对接口进行定义描述,包括请求的URL、Header、Body、以及预期响应值等,这就会产生大量的重复。

    3. 接口-模块-场景分层

    httprunner中实现了接口-模块-场景分层。通过startproject命令创建项目,可以看到以下目录。

    
    $ hrun --startproject OWInterfacesV2
    
    INFO:root: Start to create new project: D:\python\OWInterfacesV2
    
    INFO:root:      created folder: D:\python\OWInterfacesV2
    
    INFO:root:      created folder: D:\python\OWInterfacesV2\tests
    
    INFO:root:      created folder: D:\python\OWInterfacesV2\tests\api
    
    INFO:root:      created folder: D:\python\OWInterfacesV2\tests\suite
    
    INFO:root:      created folder: D:\python\OWInterfacesV2\tests\testcases
    
    INFO:root:      created file: D:\python\OWInterfacesV2\tests\debugtalk.py
    
    
    
    tests
    
    ├── api
    
    ├── debugtalk.py
    
    ├── suite
    
    └── testcases
    
    

    在组织测试用例描述的文件目录结构时,遵循以下约定:

    • 将项目的所有API接口定义放置在api目录下,并在api目录中按照项目的系统模块来组织接口的定义。

    备注:

    ---接口定义块的标识为api;

    ---接口定义块中包含def字段,形式为api_name(*args),作为接口的唯一标识ID;需要注意的是,即使api没有参数,也需要带上括号,api_name();这和编程语言中定义函数是一样的。

    • 约定将项目的所有模块定义放置在suite目录下,并在suite目录中按照项目的功能来组织模块的定义。相当于,多个api的组合。

    • 后续,在testcases目录中描述测试场景,可同时引用接口定义和模块定义。

    • 另外,相关的函数定义放置在debugtalk.py中

    例如,典型的测试用例文件的目录结构如下所示: image.png

    4. 结合项目实践

    结合到公司项目中的测试用例,遇到的问题:

    一个接口B(如login接口)依赖于前一接口A(如getToken接口)的输出结果(获取validate token),在编写B的各种用例时,每个用例都需调用一次A。

    比如下图:

    validate接口测试完后,可以extract出输出结果中的token($valtoken),在login_success用例中作为入参。 image.png 可是,如果新增一个login相关的用例,lgoin with unexist user,入参$valtoken是需要再次通过validate接口获取一次的。如果用以前的token将会返回invalid token的结果。 image.png 这时候不知道怎么再次获取token进行调用

    解决方法:

    因为很多接口的前提是先获取validate token或先登录,所以把get_validate_token的接口封装出来,放在debugtalk.py下。这样在测试用例中可以直接调用。 image.png

    同时,也把一些由环境决定的参数提取出来(测试环境或生产环境)。

    新增一个env.py文件,将环境的设置和一些公共不变的参数放在其中。如:test或prod环境,baseurl,headers等参数。

    在debugtalk.py中添加方法:根据不同环境得到不同的变量,如:get_validate_token(), get_login_token(), login_email(), reg_email()等方法。

    注意:

    .yml中的测试用例是按顺序执行的。

    比如:如果放置用例的顺序是login, logout, query。则在logout后,之前login获取的token就不能用了,到执行query时,用例会失败,提示invalidate token。

    为了避免这种非被测内容本身引起的错误,需注意下用例的顺序。这里把logout放置在最后。

    相关文章

      网友评论

        本文标题:【接口/性能】HttpRunner02-用例分层

        本文链接:https://www.haomeiwen.com/subject/mtsttftx.html