接口测试之实例篇

Posted on 周三 20 四月 2016 in [接口测试] • Tagged with [接口测试]Leave a comment

一、测试需求描述

1、 本次测试的接口为http服务端接口
2、 接口的主要分成两类,一类提供给查询功能接口,一类提供保存数据功能接口,这里我们举例2个保存数据的接口,因为这两个接口有关联性,比较有代表性;
3、接口描述:

保存信用卡账户信息接口:
传入参数:

args={
   "clientNo":"434343556",
   "alias": "**信用卡2",
   "cardName": "长城*****卡2",
   "cardNo": "25622356788251",
 }

传出参数:
1)保存成功:

{"returnCode":"0","returnMsg":"保存成功"}

2)保存失败:

{"returnCode":"1","returnMsg":"保存失败"}

保存逻辑:数据传入进来,验证通过,保存到信用卡账户表中

保存信用卡账单接口: 传入参数:

args={
   "clientNo":"434343556",
   "accountName": "测试",
   "billDate": "08",
   "billMonth": "201509",
   "cardNo": "25622356788251",
   "currentPayment": "欠款459.80",
   "paymentDate": "2015-09-25 09:00:00",
}

传出参数:
1)保存成功:

{"returnCode":"0","returnMsg":"保存成功"}

2)保存失败:

{"returnCode":"1","returnMsg":"保存失败"}

保存逻辑:保存时先去信用卡信息表查看clientNo对应的表是否存在,如存在则数据校验通过,将数据保存进入信用卡账单表

注:这个保存逻辑在接口开发设计文档中可能没有写或写的不详细,这时要与开发接口人员或产品人员多多沟通去熟悉接口逻辑

二、测试分析

1、逻辑分析
1)、从保存逻辑上来看,这两个接口明显是有依赖关系的,所以我们先测试信用卡账户信息接口,再测试保存信用卡账单接口
2)、接口传入的数据,最终是保存到数据库中,所以当接口返回保存成功的时候,我们也要去对应的数据库表中核对相应的数据(这里可以用jmeter链接数据库进行操作代理手工)
3)、当出现保存失败的情况时,我们需要查看系统的日志,所以我们也要准备好查看日志的权限和地址

2、测试工具的准备
1)、单个接口测试,使用poster/postman
2)、多个接口测试,我们使用Jmeter进行测试

三、使用工具测试

本实例中使用Jmeter对接口进行测试

首先我们说一下为什么用Poster测试后我们还要用Jmeter做接口测试,在用poster测试时候会发现的是一个接口一个接口的测试,我们每次测试成功后的数据,在工具中是无法保存的,再次测试的时候我们还要重新输入测试的数据,当我们测试一个接口的时候可能感觉不明显,但是当你测试几十个接口的时候,你就会发现使用Jmeter的好处,如果按测试阶段来说冒烟测试我们用poster,集成测试我们用Jmeter

四、使用Jmeter接口测试

1、首先邮件添加一个线程组,这里我们重命名InterfaceTest
01

02

2、在线程组上添加一个Http默认请求,并配置服务器的IP地址和传输编码

03

04

3、在线程组中添加一个HTTP请求,这里我们重命名“增加信用卡账户信息接口”

05

06

4、配置接口请求信息,这配置示例如下:

07

5、在保存信用卡账单接口请求,示例如下:

08

注:由于Jmeter请求线程组内的请求时从第一个开始执行,所以我们将需要最先执行的请求放在前面

6、在线程组上添加监听器,察看结果树和聚合报告

09

7、点击启动 …

Continue reading

接口测试之Moco篇

Posted on 周三 20 四月 2016 in [接口测试] • Tagged with [接口测试]Leave a comment

Moco 简介

Moco 的作者是郑晔,该框架还在 JavaOne 2013 大会上获过奖。
简单的说,Moco 是一个搭建模拟服务器的工具,其支持 API 和独立运行两种方式,前者通常是在 junit 等测试框架中使用,后者则是通过运行一个 jar 包开启服务。
Moco 能帮助解决开发中的哪些问题?作者的回答如下:

Moco是针对HTTP集成而生的,不过,现在也有人把它用在其它需要一个模拟服务器的场景中。比如,在移动开发中,有人开发一个移动应用,需要有一个远端服务,但在开发时,这个服务还不存在,他就用Moco模拟了一个服务,保证移动应用可以顺利的开发。同样,也有人把它用在Web前端开发里,当我们的页面需要通过与服务器交互时,就可以用Moco模拟这样一个服务。这种做法在开发一个页面原型时,非常有用,因为那个时候,我们还来不及开发一个完整的服务。

Moco 用于接口测试

既然开发人员可以通过 Moco 模拟一个还不存在的服务来进行开发、调试,那对于接口测试来说,也可以模拟一个服务进行测试。 一般而言,在项目的接口文档输出后,开发人员会进行接口开发工作,测人员会进行接口用例的设计,但往往完成用例设计会先于接口开发工作,此时如果要进行接口用例的执行,则前提是开发人员完成接口开发工作。 而通过 Moco 框架,就可以在接口文档输出后,在接口开发、接口用例设计的同时,使用 Moco 搭建一个模拟服务器,这样在用例设计完成后,即使接口开发工作还未完成,也可以立即进行执行接口用例,在这个过程中可以修改、补充用例,如此的话,在接口开发完成以后,只需要简单的去执行所有的用例就 OK,省去了很大的工作量,并且这些完善的用例,用自动化去执行,效果更佳。

开始使用 Moco

  • github 地址:Moco

  • 在项目的 readme 中找到 Quick Start,Download Standalone Moco Runner

  • 新建一个 test.json:
[
   {
      "response": {
         "text": "Hello, Moco"
      }
   }
]
  • 启动服务,端口号可自己设置
java -jar moco-runner-0.10.2-standalone.jar http -p 12306 -c test.json
29 一月 2016 14:25:20 [main] INFO  Server is started at 12306
29 一月 2016 14:25:20 [main] INFO  Shutdown port is 63643
  • 在浏览器中访问 http://localhost:12306, 将会在页面上显示 Hello,Moco

配置 …

Continue reading

测试Jenkins构建及禁用Job接口

Posted on 周三 13 四月 2016 in [接口测试] • Tagged with [Python, 接口测试]Leave a comment

使用python unittest+requests对Jenkins构建及禁用job接口进行测试:

# coding=utf-8

import unittest
import requests
import json
from requests.auth import HTTPBasicAuth


class JenkinsPostTest(unittest.TestCase):
    def setUp(self):
        # 构建job的url
        self.build_job_url = 'http://192.168.217.130:8080/jenkins/job/check_python_version/build'
        # 禁用job的url
        self.disable_job_url = 'http://192.168.217.130:8080/jenkins/job/check_python_version/disable'
        # 获取job状态等信息的rul
        self.job_url = 'http://192.168.217.130:8080/jenkins/job/check_python_version/api/json'

    # 测试构建某一job接口
    def test_buildJob(self):
        r = requests.post(self.build_job_url, data=None, auth=('admin', 'admin'))
        print r.status_code
        self.assertEqual(r.status_code, 201)

    # 测试禁用某一job接口
    def test_disableJob(self):
        # 确认job状态是否可执行,'buildable':'true'
        status = self.get_JobInfo()
        self.assertTrue(status)

        # 禁用job,断言禁用job是否成功
        r = requests.post(self.disable_job_url, data=None, auth=('admin', 'admin'))
        self.assertEqual(r.status_code, 200)

        # 获取当前job状态
        status = self.get_JobInfo()
        self.assertFalse(status)
        print status

    # 获取当前job信息
    def get_JobInfo(self):
        job_info = requests.get(self.job_url, auth=('admin', 'admin')).json()
        return job_info['buildable']
Continue reading

一个简单Python单元测试用例

Posted on 周三 13 四月 2016 in [python] • Tagged with [python]Leave a comment

使用python unittest 框架进行单元测试

# coding=utf-8
import unittest

'''
测试除法
1、自定义1个除法函数div
2、测试 1/1
3、测试 3/4
4、测试 3/0
'''


def div(a, b):
    return a / b
    # 1 / 2 = 1


class MyfirstTestCase(unittest.TestCase):
    pass

    def setUp(self):
        print 'run before every testcase'

    def tearDown(self):
        print 'run after every testcase'

    def test_1div1(self):
        print 'case1:1/1'
        case1 = div(1, 1)
        self.assertEqual(case1, 1/1)

    def test_3div4(self):
        print 'case1:3/4'
        case2 = div(3, 4)
        self.assertEqual(case2, 3/4)

    def test_3div0(self):
        print 'case3:3/0'
        case3 = div(3, 0)
        self.assertRaises(ZeroDivisionError, div, 3, 0)


if __name__ == '__main__':
    unittest.main()
Continue reading