python 3.6版本
使用 pipenv构建的虚拟化环境
安装指导遵从官方文档https://docs.httprunner.org/quickstart/
测试环境:在vmware中安装centos7,然后在centos7安装禅道软件
步骤:
1 打开charles,作为proxy
2 使用浏览器访问禅道,包括登录和退出
3 将charles中的对应步骤导出为har格式,存储在本地login.har
4 使用har2case将login.har转换为python脚本,转换结果如下:(做了一点点注释和手动修改)
# NOTE: Generated By HttpRunner v3.1.0 # FROM: test_zendao.har from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase class TestCaseTestZendao(HttpRunner): config = Config("testcase description").verify(False) teststeps = [ Step( RunRequest("test login with username and password") .post("http://192.168.75.175/zentao/user-login.html") .with_headers( **{ "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Referer": "http://192.168.75.175/zentao/user-login.html", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,lb;q=0.7" } ) .with_data( { "account": "admin", "password": "qazwsx123", "referer": "/zentao/", "keepLogin": "1", } ) .validate() .assert_equal("status_code", 200) .assert_equal( 'headers."Content-Type"', "text/html; Language=UTF-8;charset=UTF-8" ) ), Step( RunRequest("test logout") .get("http://192.168.75.175/zentao/user-logout.html") .with_headers( **{ "Host": "192.168.75.175", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Referer": "http://192.168.75.175/zentao/my/", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,lb;q=0.7" } ) .validate() .assert_equal("status_code", 200) .assert_equal( 'headers."Content-Type"', "text/html; Language=UTF-8;charset=UTF-8" ) ), # Step( # RunRequest("test reload the login page") # .get("http://192.168.75.175/zentao/user-login.html") # .with_headers( # **{ # "Host": "192.168.75.175", # "Upgrade-Insecure-Requests": "1", # "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", # "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", # "Referer": "http://192.168.75.175/zentao/my/", # "Accept-Encoding": "gzip, deflate", # "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,lb;q=0.7" # } # ) # .validate() # .assert_equal("status_code", 200) # .assert_equal( # 'headers."Content-Type"', "text/html; Language=UTF-8;charset=UTF-8" # ) # ), # Step( # RunRequest("/zentao/misc-checkUpdate-.html") # .get("http://192.168.75.175/zentao/misc-checkUpdate-.html") # .with_headers( # **{ # "Host": "192.168.75.175", # "Upgrade-Insecure-Requests": "1", # "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", # "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", # "Referer": "http://192.168.75.175/zentao/user-login.html", # "Accept-Encoding": "gzip, deflate", # "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,lb;q=0.7" # } # ) # .validate() # .assert_equal("status_code", 200) # .assert_equal( # 'headers."Content-Type"', "text/html; Language=UTF-8;charset=UTF-8" # ) # ), ] if __name__ == "__main__": TestCaseTestZendao().test_start()
5 运行hrun login_test.py
问题:
感觉脚本的可读性还好,但是底层貌似使用了requests的session,所以cookies可以自动传递;
参数化功能据说还在开发中
根据官方文档,hrun是兼容于pytest的,即pytest login_test.py可行;如果能够完全兼容于pytest,则可借助于pytest强大的生态圈