Tep集成 HttpRunner 与 Flask 实现开箱即用

2025-05-29 0 23

Tep集成 HttpRunner 与 Flask 实现开箱即用

大家好,我是刚哥。

趁着元旦假期最后一天,有着大把时间,奔着把tep做大做强的目标,好好学习了一波。在开始正文之前,先回答可能会问到的两个问题。第一个问题是为什么要集成HttpRunner?因为我最近在思考如何给tep做分层设计,参考了我司现有的接口自动化平台,它的设计是每个用例有很多测试步骤,可以针对用例设置预设变量,然后在测试步骤中引用。正当我准备自己开发类似功能时,想到了HttpRunner,我记得HttpRunner第3版是建议直接编写pytest代码而非以前的ymal或json文件了。大有所获,HttpRunner正是以这种方式编写的代码,而且和pytest有很好的结合,很符合tep要集成的第三方包的希望。第二个问题是为什么要集成Flask?刚开始只是我用来调试代码的,等到把Mock写完以后,想到可能大家也需要调试代码,就把它做到tep里面了,并且附带了测试用例的示例代码,安装完以后就能一键运行,开箱即用,美滋滋。归根结底,都是为了把tep做大做强。

tep0.9.3正式发布

要体验HttpRunnerFlask,需要先安装或升级到tep0.9.3。

安装:

  1. pip install tep

升级:

  1. pip install -U tep

或者指定版本:

  1. pip install tep==0.9.3

安装tep时会顺带安装HttpRunnerFlask,安装完以后就可以执行命令初始化项目:

  1. tep startproject demo093

输出:

  1. D:\\PycharmProjects>tep startproject demo093
  2. 2022-01-03 16:07:31.929 | INFO | tep.scaffold:create_scaffold:53 – Create new project: demo093
  3. Project root dir: D:\\PycharmProjects\\demo093
  4. Created folder: demo093
  5. Created folder: demo093\\fixtures
  6. Created folder: demo093\\tests
  7. Created folder: demo093\\files
  8. Created folder: demo093\\reports
  9. Created folder: demo093\\utils
  10. Created file: demo093\\.gitignore
  11. Created file: demo093\\conf.yaml
  12. Created file: demo093\\conftest.py
  13. Created file: demo093\\pytest.ini
  14. Created file: demo093\\fixtures\\__init__.py
  15. Created file: demo093\\fixtures\\fixture_admin.py
  16. Created file: demo093\\fixtures\\fixture_env_vars.py
  17. Created file: demo093\\fixtures\\fixture_login.py
  18. Created file: demo093\\fixtures\\fixture_your_name.py
  19. Created file: demo093\\tests\\__init__.py
  20. Created file: demo093\\tests\\test_login.py
  21. Created file: demo093\\tests\\test_post.py
  22. Created file: demo093\\tests\\test_mysql.py
  23. Created file: demo093\\tests\\test_request.py
  24. Created file: demo093\\tests\\test_login_pay.py
  25. Created file: demo093\\tests\\test_login_pay_httprunner.py
  26. Created file: demo093\\utils\\__init__.py
  27. Created file: demo093\\utils\\flask_mock_api.py
  • 修改了fixture_env_vars.py里面的domain为http://127.0.0.1:5000,这是Flask启动后的默认地址。
  • 修改了fixture_login.py里面的登录url和username,跟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有个全新和全面的了解啦。以下是全文:

tep

tep是Try Easy Pytest的首字母缩写,是一款基于pytest测试框架的测试工具,集成了各种实用的第三方包和优秀的自动化测试设计思想,帮你快速实现自动化项目落地。

安装

支持Python3.6以上,推荐Python3.8以上。

标准安装:

  1. $ pip install tep

国内镜像:

  1. $ pip –default-timeout=600 install -i https://pypi.tuna.tsinghua.edu.cn/simple tep

检查安装成功:

  1. $ tep -V # 或者 tep –version
  2. 0.2.3

快速创建项目

tep提供了脚手架,预置了项目结构和代码,打开cmd,使用startproject命令快速创建项目:

  1. tep startproject project_name

并且提供了-venv参数,在项目初始化时,可以同时创建一个虚拟环境(推荐):

  1. tep startproject project_name -venv

输出测试报告

tep提供了–tep-reports参数来生成allure测试报告:

  1. pytest –tep-reports

报告文件存放在根目录的reports/中。

Mock服务

tep自带了一个Flask应用(utils/flask_mock_api.py),提供了登录到下单流程的5个接口,启动后即可一键运行示例中的测试用例。

三种开发模式

tep兼容三种开发模式:用例数据一体(适合新手)、用例数据分离(适合老手)、HttpRunner(新老皆宜)。

①用例数据一体,示例代码如下所示:

  1. def test(env_vars, login):
  2. # 搜索商品
  3. response = request(
  4. \”get\”,
  5. url=env_vars.domain + \”/searchSku\”,
  6. headers={\”token\”: login.token},
  7. params={\”skuName\”: \”电子书\”}
  8. )
  9. sku_id = jmespath.search(\”skuId\”, response.json())
  10. sku_price = jmespath.search(\”price\”, response.json())
  11. assert response.status_code < 400
  12. # 添加购物车
  13. sku_num = 3
  14. response = request(
  15. \”post\”,
  16. url=env_vars.domain + \”/addCart\”,
  17. headers={\”token\”: login.token},
  18. json={\”skuId\”: sku_id, \”skuNum\”: sku_num}
  19. )
  20. total_price = jmespath.search(\”totalPrice\”, response.json())
  21. assert response.status_code < 400
  22. # 下单
  23. response = request(
  24. \”post\”,
  25. url=env_vars.domain + \”/order\”,
  26. headers={\”token\”: login.token},
  27. json={\”skuId\”: sku_id, \”price\”: sku_price, \”skuNum\”: sku_num, \”totalPrice\”: total_price}
  28. )
  29. order_id = jmespath.search(\”orderId\”, response.json())
  30. assert response.status_code < 400
  31. # 支付
  32. response = request(
  33. \”post\”,
  34. url=env_vars.domain + \”/pay\”,
  35. headers={\”token\”: login.token},
  36. json={\”orderId\”: order_id, \”payAmount\”: \”6.9\”}
  37. )
  38. assert response.status_code < 400
  39. assert response.json()[\”success\”] == \”true\”

更多内容请参考《如何使用teprunner测试平台编写从登录到下单的大流程接口自动化用例》

②用例数据分离

开发中,敬请期待…

HttpRunner,示例代码如下所示:

  1. from httprunner import HttpRunner, Config, Step, RunRequest
  2. class TestLoginPay(HttpRunner):
  3. config = (
  4. Config(\”登录到下单流程\”)
  5. .variables(
  6. **{
  7. \”skuNum\”: \”3\”
  8. }
  9. )
  10. .base_url(\”http://127.0.0.1:5000\”)
  11. )
  12. teststeps = [
  13. Step(
  14. RunRequest(\”登录\”)
  15. .post(\”/login\”)
  16. .with_headers(**{\”Content-Type\”: \”application/json\”})
  17. .with_json({\”username\”: \”dongfanger\”, \”password\”: \”123456\”})
  18. .extract()
  19. .with_jmespath(\”body.token\”, \”token\”)
  20. .validate()
  21. .assert_equal(\”status_code\”, 200)
  22. ),
  23. Step(
  24. RunRequest(\”搜索商品\”)
  25. .get(\”searchSku?skuName=电子书\”)
  26. .with_headers(**{\”token\”: \”$token\”})
  27. .extract()
  28. .with_jmespath(\”body.skuId\”, \”skuId\”)
  29. .with_jmespath(\”body.price\”, \”skuPrice\”)
  30. .validate()
  31. .assert_equal(\”status_code\”, 200)
  32. ),
  33. Step(
  34. RunRequest(\”添加购物车\”)
  35. .post(\”/addCart\”)
  36. .with_headers(**{\”Content-Type\”: \”application/json\”,
  37. \”token\”: \”$token\”})
  38. .with_json({\”skuId\”: \”$skuId\”, \”skuNum\”: \”$skuNum\”})
  39. .extract()
  40. .with_jmespath(\”body.totalPrice\”, \”totalPrice\”)
  41. .validate()
  42. .assert_equal(\”status_code\”, 200)
  43. ),
  44. Step(
  45. RunRequest(\”下单\”)
  46. .post(\”/order\”)
  47. .with_headers(**{\”Content-Type\”: \”application/json\”,
  48. \”token\”: \”$token\”})
  49. .with_json({\”skuId\”: \”$skuId\”, \”price\”: \”$skuPrice\”, \”skuNum\”: \”$skuNum\”, \”totalPrice\”: \”$totalPrice\”})
  50. .extract()
  51. .with_jmespath(\”body.orderId\”, \”orderId\”)
  52. .validate()
  53. .assert_equal(\”status_code\”, 200)
  54. ),
  55. Step(
  56. RunRequest(\”支付\”)
  57. .post(\”/pay\”)
  58. .with_headers(**{\”Content-Type\”: \”application/json\”,
  59. \”token\”: \”$token\”})
  60. .with_json({\”orderId\”: \”$orderId\”, \”payAmount\”: \”6.9\”})
  61. .validate()
  62. .assert_equal(\”status_code\”, 200)
  63. .assert_equal(\”body.success\”, \”true\”)
  64. ),
  65. ]

用户手册

https://dongfanger.gitee.io/blog/chapters/tep.html

原文链接:https://mp.weixin.qq.com/s/f1o88Lj_FBx8MJnld7L_QQ

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Tep集成 HttpRunner 与 Flask 实现开箱即用 https://www.kuaiidc.com/90257.html

相关文章

发表评论
暂无评论