51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2425|回复: 2
打印 上一主题 下一主题

简单实现接口自动化测试(基于python+unittest)

[复制链接]
  • TA的每日心情
    无聊
    2024-11-5 10:03
  • 签到天数: 77 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2018-6-15 14:50:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    简介
    本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增
    加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一
    个大致的了解。

    引言
    为什么要做接口自动化测试?

    在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回
    归。但接口自动化测试因其实现简单、维护成本低,容易提高覆盖率等特点,越来越受重视。

    为什么要自己写框架呢?

    使用Postman调试通过过直接可以获取接口测试的基本代码,结合使用requets + unittest很容易实现接口
    自动化测试的封装,而且requests的api已经非常人性化,非常简单,但通过封装以后(特别是针对公司内
    特定接口),可以进一步提高脚本编写效率。

    一个现有的简单接口例子
    下面使用requests + unittest测试一个查询接口

    接口信息如下

    请求信息:
    1. <p>
    2. </p><p>Method:POST</p><p>
    3. </p><p>URL:api/match/image/getjson</p><p>
    4. </p><p>Request:</p><p>
    5. </p><p>{</p><p>"category": "image",</p><p>"offset": "0",</p><p>"limit": "30",</p><p>"sourceId": "0",</p><p>"metaTitle": "",</p><p>"metaId": "0",</p><p>"classify": "unclassify",</p><p>"startTime": "",</p><p>"endTime": "",</p><p>"createStart": "",</p><p>"createEnd": "",</p><p>"sourceType": "",</p><p>"isTracking": "true",</p><p>"metaGroup": "",</p><p>"companyId": "0",</p><p>"lastDays": "1",</p><p>"author": ""</p><p>}</p><p>Response示例:</p><p>
    6. </p><p>{</p><p>"timestamp" : xxx,</p><p>"errorMsg" : "",</p><p>"data" : {</p><p>"config" : xxx</p><p>}</p><p>Postman测试方法见截图:</p><p>
    7. </p><p>图片名称</p><p>
    8. </p><p>测试思路</p><p>1.获取Postman原始脚本</p><p>
    9. </p><p>2.使用requests库模拟发送HTTP请求**</p><p>
    10. </p><p>3.对原始脚本进行基础改造**</p><p>
    11. </p><p>4.使用python标准库里unittest写测试case**</p><p>
    12. </p><p>原始脚本实现</p><p>
    13. </p><p>未优化</p><p>
    14. </p><p>该代码只是简单的一次调用,而且返回的结果太多,很多返回信息暂时没用,示例代码如下</p><p>
    15. </p><p>import requests</p><p>
    16. </p><p>url = "http://cpright.xinhua-news.cn/api/match/image/getjson"</p><p>
    17. </p><p>querystring = {"category":"image","offset":"0","limit":"30","sourceId":"0","metaTitle":"","metaId":"0","classify":"unclassify","startTime":"","endTime":"","createStart":"","createEnd":"","sourceType":"","isTracking":"true","metaGroup":"","companyId":"0","lastDays":"1","author":""}</p><p>
    18. </p><p>headers = {</p><p>    'cache-control': "no-cache",</p><p>    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"</p><p>    }</p><p>
    19. </p><p>response = requests.request("POST", url, headers=headers, params=querystring)</p><p>
    20. </p><p>print(response.text)</p><p>优化 第一版</p><p>
    21. </p><p>调整代码结构,输出结果Json出来,获取需要验证的response.status_code,以及获取结果校验需要用到的results['total']</p><p>
    22. </p><p>#!/usr/bin/env python</p><p>#coding: utf-8</p><p>'''</p><p>unittest merchant backgroud interface</p><p>@author: zhang_jin</p><p>@version: 1.0</p><p>@see:http://www.python-requests.org/en/master/</p><p>'''</p><p>
    23. </p><p>import unittest</p><p>import json</p><p>import traceback</p><p>import requests</p><p>
    24. </p><p>
    25. </p><p>url = "http://cpright.xinhua-news.cn/api/match/image/getjson"</p><p>
    26. </p><p>querystring = {</p><p>    "category": "image",</p><p>    "offset": "0",</p><p>    "limit": "30",</p><p>    "sourceId": "0",</p><p>    "metaTitle": "",</p><p>    "metaId": "0",</p><p>    "classify": "unclassify",</p><p>    "startTime": "",</p><p>    "endTime": "",</p><p>    "createStart": "",</p><p>    "createEnd": "",</p><p>    "sourceType": "",</p><p>    "isTracking": "true",</p><p>    "metaGroup": "",</p><p>    "companyId": "0",</p><p>    "lastDays": "1",</p><p>    "author": ""</p><p>}</p><p>
    27. </p><p>headers = {</p><p>    'cache-control': "no-cache",</p><p>    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"</p><p>    }</p><p>
    28. </p><p>#Post接口调用</p><p>response = requests.request("POST", url, headers=headers, params=querystring)</p><p>
    29. </p><p>#对返回结果进行转义成json串</p><p>results = json.loads(response.text)</p><p>
    30. </p><p>#获取http请求的status_code</p><p>print "Http code:",response.status_code</p><p>
    31. </p><p>#获取结果中的total的值</p><p>print results['total']</p><p>#print(response.text)</p><p>优化 第二版</p><p>
    32. </p><p>接口调用异常处理,增加try,except处理,对于返回response.status_code,返回200进行结果比对,不是200数据异常信息。</p><p>
    33. </p><p>#!/usr/bin/env python</p><p>#coding: utf-8</p><p>'''</p><p>unittest merchant backgroud interface</p><p>@author: zhang_jin</p><p>@version: 1.0</p><p>@see:http://www.python-requests.org/en/master/</p><p>'''</p><p>
    34. </p><p>import json</p><p>import traceback</p><p>import requests</p><p>
    35. </p><p>
    36. </p><p>url = "http://cpright.xinhua-news.cn/api/match/image/getjson"</p><p>
    37. </p><p>querystring = {</p><p>    "category": "image",</p><p>    "offset": "0",</p><p>    "limit": "30",</p><p>    "sourceId": "0",</p><p>    "metaTitle": "",</p><p>    "metaId": "0",</p><p>    "classify": "unclassify",</p><p>    "startTime": "",</p><p>    "endTime": "",</p><p>    "createStart": "",</p><p>    "createEnd": "",</p><p>    "sourceType": "",</p><p>    "isTracking": "true",</p><p>    "metaGroup": "",</p><p>    "companyId": "0",</p><p>    "lastDays": "1",</p><p>    "author": ""</p><p>}</p><p>
    38. </p><p>headers = {</p><p>    'cache-control': "no-cache",</p><p>    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"</p><p>    }</p><p>
    39. </p><p>
    40. </p><p>try:</p><p>    #Post接口调用</p><p>    response = requests.request("POST", url, headers=headers, params=querystring)</p><p>
    41. </p><p>    #对http返回值进行判断,对于200做基本校验</p><p>    if response.status_code == 200:</p><p>        results = json.loads(response.text)</p><p>        if results['total'] == 191:</p><p>            print "Success"</p><p>        else:</p><p>            print "Fail"</p><p>            print results['total']</p><p>    else:</p><p>        #对于http返回非200的code,输出相应的code</p><p>        raise Exception("http error info:%s" %response.status_code)</p><p>except:</p><p>    traceback.print_exc()</p><p>优化 第三版</p><p>
    42. </p>
    复制代码

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 15:41 , Processed in 0.068165 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表