当前位置: 首页 > 科技观察

Tep整合HttpRunner和Flask实现开箱即用

时间:2023-03-13 22:30:03 科技观察

大家好,我是刚哥。趁着元旦假期的最后一天,我有大把的时间,朝着做大做强TEP的目标努力学习。在开始课文之前,回答可能会问到的两个问题。第一个问题,为什么要集成HttpRunner?因为最近在想怎么给tep做分层设计。我指的是我们现有的界面自动化平台。它的设计是每个用例都有很多测试步骤,可以根据用例来设置。变量是预设的,然后在测试步骤中引用。就在我准备自己开发类似功能的时候,我想到了HttpRunner。记得第三版的HttpRunner建议直接写pytest代码,而不是以前的ymal或者json文件。收获颇多,HttpRunner就是这样写的代码,和pytest的结合很好,符合tep希望集成的第三方包。第二个问题,为什么要集成Flask?一开始,我只是用它来调试代码。写完Mock后,想到大家可能需要调试代码,就放在tep里面,自带测试用例。样例代码安装后可一键运行,开箱即用。说到底,都是为了把TEP做大做强。tep0.9.3正式发布体验HttpRunner和Flask需要先安装或升级到tep0.9.3。安装:pipinstalltep升级:pipinstall-Utep或指定版本:pipinstalltep==0.9.3安装tep时,会顺带安装HttpRunner和Flask。安装完成后可以执行命令初始化项目:tepstartprojectdemo093输出:D:\PycharmProjects>tepstartprojectdemo0932022-01-0316:07:31.929|INFO|tep.scaffold:create_scaffold:53-Createnewproject:demo093Projectrootdir:D:\PycharmProjects\demo093Createdfolder:demo093Createdfolder:demo093\fixturesCreatedfolder:demo093\testsCreatedfolder:demo093\filesCreatedfolder:demo093\reportsCreatedfolder:demo093\utilsCreatedfile:demo093\.gitignoreCreatedfile:demo093\conf.yamlCreatedfile:demo093\conftest.pyCreatedfile:demo093\pytest.iniCreatedfile:demo093\fixtures\__init__.pyCreatedfile:demo093\fixtures\fixture_admin.pyCreatedfile:demo093\fixtures\fixture_env_vars.py9Created3file:demo093\fixtures\fixture_env_vars.py9Created3file:demo0fixture_login.pyCreatedfile:demo093\fixtures\fixture_your_name.pyCreatedfile:demo093\testsdemo093\tests\test_login.py创建文件:demo093\tests\test_post.py创建文件:demo093\tests\test_mysql。pyCreatedfile:demo093\tests\test_request.pyCreatedfile:demo093\tests\test_login_pay.pyCreatedfile:demo093\tests\test_login_pay_httprunner.pyCreatedfile:demo093\utils\__init__.pyCreatedfile:demo093\utils\flask_mock_api.py修改了fixture_env_domainsinfixture_py0http://127.0.1:5000,这是Flask启动后的默认地址。修改fixture_login.py中的登录url和用户名,对应Flask的Mock。新增utils\flask_mock_api.py直接启动Mock服务。新增tests\test_login_pay.py,用例数据集成开发模式,登录订单流程示例代码,一键运行成功。新增tests\test_login_pay_httprunner.py、HttpRunner开发模式、登录下单流程示例代码,一键运行成功。在新版README.md之前,tep的README都是英文的。这次我也决定不装了,改成了中文,丰富了内容。大家可以对tep有一个全新的全面的认识。以下为全文:teptep是TryEasyPytest的缩写。它是一个基于pytest测试框架的测试工具。它集成了各种实用的第三方包和优秀的自动化测试设计思想,帮助您快速实施自动化项目。安装支持Python3.6以上版本,推荐使用Python3.8以上版本。标准安装:$pipinstalltep国内镜像:$pip--default-timeout=600install-ihttps://pypi.tuna.tsinghua.edu.cn/simpletep检查安装是否成功:$tep-V#或者tep--version0。2.3快速创建项目tep提供脚手架,预设项目结构和代码,打开cmd,使用startproject命令快速创建项目:tepstartprojectproject_name并提供-venv参数。项目初始化时,可以同时创建一个虚拟环境(推荐):tepstartprojectproject_name-venv输出测试报告tep提供--tep-reports参数生成allure测试报告:pytest--tep-reports报告文件存储在reports/根目录下。模拟服务tep自带了一个Flask应用程序(utils/flask_mock_api.py),提供了5个登录订单流程的接口,启动后可以一键运行示例中的测试用例。三种开发模式tep兼容三种开发模式:用例数据集成(适合新手)、用例数据分离(适合老手)、HttpRunner(新老皆宜)。①用例数据集成,示例代码如下:deftest(env_vars,login):#searchproductresponse=request("get",url=env_vars.domain+"/searchSku",headers={"token":login.token},params={"skuName":"e-book"})sku_id=jmespath.search("skuId",response.json())sku_price=jmespath.search("price",response.json())assertresponse.status_code<400#添加购物车sku_num=3response=request("post",url=env_vars.domain+"/addCart",headers={"token":login.token},json={"skuId":sku_id,"skuNum":sku_num})total_price=jmespath.search("totalPrice",response.json())assertresponse.status_code<400#orderresponse=request("post",url=env_vars.domain+"/order",headers={"token":login.token},json={"skuId":sku_id,"price":sku_price,"skuNum":sku_num,"totalPrice":total_price})order_id=jmespath.search("orderId",response.json())断言响应。status_code<400#Paymentresponse=request("post",url=env_vars.domain+"/pay",headers={"token":login.token},json={"orderId":order_id,"payAmount":"6.9"})assertresponse.status_code<400assertresponse.json()["success"]=="true"更多信息请参考《如何使用teprunner测试平台编写从登录到下单的大流程接口自动化用例》②用例数据分离开发,敬请期待...③HttpRunner,示例代码为如下:fromhttprunnerimportHttpRunner,Config,Step,RunRequestclassTestLoginPay(HttpRunner):config=(Config("Logintoorderprocess").variables(**{"skuNum":"3"}).base_url("http://127.0.0.1:5000"))teststeps=[Step(RunRequest("login").post("/login").with_headers(**{"Content-Type":"application/json"}).with_json({"username":"dongfanger","password":"123456"}).extract().with_jmespath("body.token","token").validate().assert_equal("status_code",200)),Step(RunRequest("搜索商品").get("searchSku?skuName=电子书").with_headers(**{"token":"$token"}).extract().with_jmespath("body.skuId","skuId").with_jmespath("body.price","skuPrice").validate().assert_equal("status_code",200)),Step(RunRequest("添加购物车").post("/addCart").with_headers(**{"Content-Type":"application/json","token":"$token"}).with_json({"skuId":"$skuId","skuNum":"$skuNum"}).extract().with_jmespath("body.totalPrice""totalPrice").validate().assert_equal("status_code",200)),Step(RunRequest("下单").post("/order").with_headers(**{"Content-Type":"application/json","token":"$token"}).with_json({"skuId":"$skuId","price":"$skuPrice","skuNum":"$skuNum","totalPrice":"$totalPrice"}).extract().with_jmespath("body.orderId","orderId").validate().assert_equal("status_code",200)),Step(RunRequest("支付").post("/pay").with_headers(**{"Content-Type":"application/json","token":"$token"}).with_json({"orderId":"$orderId","payAmount":"6.9"}).validate().assert_equal("status_code",200).assert_equal("body.success","true")),]用户手册https://dongfanger.gitee.io/blog/章节/tep.html