HTTP 接口自动化测试方案

HTTP 接口自动化测试方案

<a name="toQ8V"></a>

测试人员的角色

  • 手工测试人员
    • 执行
      • 读懂测试用例
      • 明白业务逻辑
      • 准备测试数据
      • 比较执行结果
    • 持续执行
      • 选择持续集成的工具
      • 让测试定时执行
    • 关注点:数据和对比
  • 中高级自动化测试人员
    • 编写测试脚本
      • 脚本都是线性的
        image.png
        image.png
      • 编写 JMeter 测试脚本
        • 线性的
        • 准备数据
        • 请求接口
        • 解析响应
        • 进行断言
        • 查看结果
      • 编写 Postman 测试脚本
        • 线性的
        • 准备数据
        • 请求接口
        • 解析响应
        • 进行断言
        • 查看结果
      • 编写 Python 测试脚本
        • 有测试的概念
          • 代码可以直接告诉你:结果
          • 需要用“单元测试框架”或者 BDD(behavior driven development) 测试框架
            • 后者,没有人用 Python 做 BDD,大部分用的 Java 的 Cucumber
            • 只考虑前者。
            • 只考虑 Python
            • 选择有两个:pytest 和 unittest
              • unittest:安装完 Python,就自带了
              • pytest:安装完 Python,没有带,需要 pip install pytest 才能有
                • 优势:参数化,报告好看
          • 单元测试框架带来的好处
            • 断言:让程序去判断是不是通过,并且告诉执行者
        • 无测试的概念
          • 用 Python 去执行 HTTP 请求
          • 用 目测 HTTP 响应的结果
          • 栗子
            image.png
            image.png
          • 代码
            image.png
          • 什么叫做无测试?代码不会告诉你 “PASS”或者 “FAIL”,必须目测
            • 看控制台的输出
            • 通过抓取通信,看通信的内容
    • 【抽离业务】编写业务代码
      • 适用于:有测试分层的概念的方案
        image.png
        image.png
      • 分层
        image.png
        image.png
        • 测试脚本有调用,并不是所有的工作都在这一个脚本中完成
          • 主要:场景方法:构建请求,解析响应(相当于在手工界面测试的:输入数据和点击提交)
          • 次要:核心方法:做支持的,读文件(CSV,Excel,Json,Yaml……),字符处理
      • 场景方法
        • 依靠 业务类
        • 连接 测试脚本 和 业务类
        • 中间层,方便测试脚本的使用,降低使用难度,提高效率,节省时间
          • 栗子
            • 教会10个手工测试/初级自动化测试:在测试脚本使用业务类:5 天
            • 教会10个手工测试/初级自动化测试:在测试脚本使用场景方法:1 + 1 天
        • 写 业务类 的人,来写场景方法
      • 业务类
        • 构建请求
        • 解析响应
        • 具体的实现,交给“核心层”来做
    • 关注的点:业务,业务逻辑,是功能本身
  • 测试开发/高级自动化测试人员
    • 负责“核心层”
    • 真正的操作“核心工具”的人
    • 在 Python 中,核心工具 = 各种第三方库
    • 库 = 无数个 “类”
    • 类,python 编程的术语,面向对象编程的基本单元

<br />

<a name="KHSXk"></a>

测试工具的选择

  • JMeter:线性工具,不用分层,一个人做所有
  • Postman:比 JMeter 还线性,一个人做所有
  • Python:
    • 可以线性
    • 也可以分层
    • 关键点:是否做业务类(抽离业务类)

<br />

<a name="iWzn3"></a>

Python 的自动化测试方案

  • 线性
    • 写多少个 Python 的文件(*.py)
    • 有没有涉及到“类”
    • 有没有涉及到测试:脱离目测对比,程序没有直接告诉结果
    • 有没有在文件中写 “方法”
    • 有没有编写 非 Python 的文件
    • 每个文件分别是什么
    • 要如何执行来看测试结果
  • 分层
    • 一定写了“业务类”或者“业务模块”(没有用面向对象,用了面向过程)
    • 直接执行测试的数据是哪些文件?
    • 数据本身是关系型(一行一行的表格)?还是借助了“键值对”的方式?
    • 数据是如何使用的?不要用代码来描述
    • 数据的使用是如何在用例脚本中实现的?
    • 用例脚本是否用到了“类”
    • 用例脚本如果用到了“类”,是否是直接写的类,还是集成了别的“类”
    • 如果用例脚本需要继承“类”,被继承的类是如何设计的(可以用类图表示),也可以直接描述。
    • 用例脚本本身如果是个类,这个类是如何设计的(可以用类图表示),也可以直接描述。
    • 如果用例脚本不是个类,那么“方法”是如何设计的,有哪些方法,分别是什么用?
    • 用例脚本中需要调用的场景方法是怎么样设计的,输入参数、输出返回值?
    • 用例脚本中需要调用的核心方法是哪些?
    • 从以下开始是高级水平:

  • 场景方法的步骤有哪些,具体的步骤描述
  • 场景方法显然用到了业务类,业务类是否需要继承?
  • 如果业务类需要继承别的“类”,请设计这个或者这些被继承的“类”(类图或者描述)
  • 业务类本身要有什么设计(类图或者描述)
  • 业务类本身是否需要别的类做支持,非继承方式的支持,而是调用(实例化)等支持,具体有哪些?
  • HTTP 的请求究竟是怎么发出去的?描述数据输入到 Python 的第三方库的使用
  • HTTP 的响应在 Python 的第三方库中,是什么样的结构(类,或者普通结构 list、dict等)
  • 如何需要把第三方库进行一个封装,请设计一个封装后的类(类图或者描述)

<a name="gISES"></a>

Python 接口自动化测试的代码实现

  • 线性
  • 分层
  • 对象:Ping++的真实的接口
    • 支付对象的创建
    • 支付对象的撤销
    • 支付对象的查询
    • 支付对象的列表
    • 用户
      • 新注册的(已签约的试用版用户)
      • 未签约的无限次使用的用户,需要RSA私钥
        • 账号:liutingli@cdtest.pro
        • 密码:Welcome123!
        • 开发密钥:sk_test_CGmn58bPGizDqvDCeTCK8Oi5
        • RSA私钥:

-----BEGIN PUBLIC KEY-----<br />MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4JmKJNk4w6qpV/vNF0HC<br />Eyg55CPoniRlRUKyKHuc9FXS1ckNo3gLONVJXT9i54+GB3bZWX0KXFvlMbXAKwUd<br />wdIIZcifRqpGDhJopMosCFpGXz+trnq8hWaJvlgzx4v+mAbDuy+r1Y1FEex9hPUN<br />zP0zTy86jyu+ZTmwJXJQZVbuNxvMC7tooGAVtiIRqJK5hygcXd4BFLR+igLkzMnG<br />9NGkg3Xsc2hLqpAwpUauXQdAvz7Rgfe9cEKfN2W+mvXA6DRcCS58qrjzmJw4WOZJ<br />M1cARi9iCdZy5wehIAJ4oHIA3R2lj+IFoyB9UQTgNmKK6bCNZn8+ZsjakfbGL/k7<br />8QIDAQAB<br />-----END PUBLIC KEY-----

  - 请求次数:500/月
  - APP_ID: app_rPejT898avPSnDaL
- 未签约的无限次试用的用户,不需要RSA私钥(可以用Postman来测试)
  - 账号:liu.tingli@qq.com
  - 密码:
  - 旧的密钥(无效):sk_test_aX50eTPuPaH8fzXDaTWzvnr1
  - 新的密钥(有效):sk_test_5mvfXDq9G0C8vrrrjH8aXvXH
  - RSA私钥:无需提供
  - 请求次数:无限
  - APP_ID:app_HGafHSLyDm9KT0OO
  - 管理平台:[https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview](https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容