精华内容
下载资源
问答
  • 接口功能测试策略

    万次阅读 2012-04-18 15:30:07
    由于平台服务器是通过接口来与客户端交互数据提供各种服务,因此服务器测试工作首先需要进行的是接口测试...以下便是个人的平台服务器接口功能测试经验总结: 一、接口测试范围  根据服务器的测试需求,接口测试范围

    由于平台服务器是通过接口来与客户端交互数据提供各种服务,因此服务器测试工作首先需要进行的是接口测试工作。测试人员需要通过服务器接口功能测试来确保接口功能实现正确,那么其他测试人员进行客户端与服务器结合的系统测试过程中,就能够排除由于服务器接口缺陷所导致的客户端问题,便于开发人员定位问题。以下便是个人的平台服务器接口功能测试经验总结:

    一、接口测试范围

        根据服务器的测试需求,接口测试范围主要分为:1、新增接口的测试;2、新增业务功能接口测试;3、整个服务器的接口测试。所需测试测试接口依次增多,在测试时间足够的条件下,当然需要对所有接口进行测试用例的设计,但如果测试较短的情况下,则应该首先根据用户的典型操作对测试接口进行优先级划分,对调用频繁接口需要优先进行测试。

    二、接口测试策略

           在进行平台服务器接口测试之前,首先需要整理服务器接口的测试方案,分析接口测试的要点,平台服务器的接口测试内容主要有:

    接口设计检查

    接口用于服务器与客户端的数据交互,客户端通过网络协议传递的数据为服务器接口的输入数据,因此应该首先通过服务器接口文档及客户端数据约束文档进行交互数据的有效性检查:

    n  整数型数据位数

    n  浮点型数据精度

    n  字符串数据范围值

    要求客户端的整数型、浮点型、字符串数据以及其最大值和最小值都能作为服务器接口的有效输入。这些工作在服务器设计评审时就可以进行,以便确保不会出现客户端上传数据被服务器自动进行截断或四舍五入的操作。

    接口依赖关系检查

        以上策略只谈到单个接口的测试方法,对于用户来说,一个操作可能会造成服务器调用多个接口来进行完成,因此还需要从业务处理的角度,对各种业务操作所涉及的多个接口之间依赖调用进行测试。

        接口依赖关系检查主要是通过接口的输出值为另一接口的输入值来实现的,因此在进行接口测试之前,需要分析所测试接口的输入值是通过客户端还是其他接口输出来获取的,在设计测试用例时,加入接口的依赖关系说明以便于测试。

    接口输入/输出验证

    服务器接口功能测试类似于单元测试,在设计测试用例时,侧重点在于接口模块输入/输出项的正确性验证,根据接服务器接口处理方式,对各种接口进行分类:

    第一类:条件判断接口

           这类接口在接收到请求数据后,会根据输入参数进行条件判断,然后返回相应结果码,通常涉及条件判断的接口有:用户鉴权接口、升级状态上报、密码修改/重置等接口。因此输入/输出项验证的侧重点主要集中在:

    1)判断条件的验证

    要对判断条件进行验证,则需要知道接口是根据哪些输入项来进行判断的,以密码重置接口为例:

    密码重置接口

    『接口功能』:用户登录之后发起找回密码操作,用户输入邮箱信息后,游戏中心将向平台服务器发送请求,平台服务器将随机为用户生成新的密码,发到用户的邮箱中。

    『接口方向』:游戏中心—>平台服务器

    『遵循协议』:HTTPS,请求消息使用Post方式

    参数名称

    参数类型

    参数长度

    说明

    userID

    Int

    10

    用户ID号

    email

    String

    60

    邮箱地址

    key

    String

    50

    接口名称

    version

    String

    8

    版本号

    响应消息(sendMessageRes)

    参数名称

    参数类型

    参数长度

    说明

    resultCode

    Int

    5

    结果返回码,返回42000表示处理成功

    此接口根据输入的userID、email参数来进行数据正确性的判断(key是接口名称,如果错误服务器将不会处理,version是版本号,其值只是用于记录,不参与判断),设计接口测试用例时,应该首先对接口的判断参数进行验证,这些输入项不能为空,然后利用等价类划分、边界值方法来根据userID、email输入项设计各种合法的数据,验证接口是否可以正常处理。

    2)异常数据的响应

    只考虑正常情况,而不考虑异常场景是无法保证接口功能运行正常,对于密码重置接口,用户ID不存在、不合法,邮箱输入格式错误、用户邮箱信息不存在或未激活就是测试时需要考虑的异常场景,设计这类输入值,并且检查接口返回的响应码,响应码的正确才能保证客户端根据异常情况来显示相应的提示信息。简而言之,条件判断的接口其测试策略就是根据判断条件来设计各种输入值来检验接口的功能。

    第二类:数据查询接口

           这类接口接收到请求数据后,首先会验证请求是否合法,然后会根据请求项查询数据库相应表中数据返回给客户端,通常涉及数据查询的接口有:用户基本资料/经验值/赛事信息查询、游戏列表获取、在线人数查询等接口。以用户经验值查询接口为例:

    用户经验值查询接口

    『接口功能』:用户登录游戏中心后,可以查询自己每个游戏项目的经验值信息,包括此项目的经验值等级、等级称号、今日经验值上限等。

    『接口方向』:游戏中心—>平台服务器

    『遵循协议』:HTTP+XML,请求消息使用Post方式

    参数名称

    参数类型

    参数长度

    说明

    userID

    Int

    10

    用户ID号

    webkey

    String

    60

    当前分配给指定登录用户的密钥

    key

    String

    50

    接口名称

    version

    String

    8

    版本号

    isAll

    Int

    1

    是否查询用户所有的运动项目经验值 0:是;1否

    sportItemID

    String

    50

    运动项目ID,当isAll=1时不能为空,指定查询某个运动项目的经验

    响应消息(sendMessageRes)

    参数名称

    参数类型

    参数长度

    说明

    sportItemID

    String

    50

    运动项目ID

    sumExp

    Int

    11

    运动经验值总额

    expLevel

    Int

    3

    经验值等级

    minExp

    Int

    11

    本级最小经验值

    expOrder

    Int

    11

    经验值排名

    maxExp

    Int

    11

    本级最大经验值

    todayExp

    Int

    11

    今日获得经验值

    todayExpLimit

    Int

    11

    今日经验值上限

    designation

    String

    30

    称号(对应于经验值)

    winCount

    Int

    11

    胜利场次

    lossCount

    Int

    11

    失败场次

    isMaxExp

    Int

    1

    总经验值是否达到最大 0 否;1 是

    此接口首先会根据webkey来判断请求是否合法,然后根据请求参数中的userID、isAll、sportItemID来查询数据表中相应数据。除了象条件判断接口一样根据判断项webkey、请求参数userID、isAll、sportItemID设计合法/不合法和正常/异常测试值之外,还需要结合数据库来对查询结果进行验证:

    1)是否根据正确的关联数据表进行查询;

    2)验证查询结果是否从数据表中正确项中获取,涉及到多表联合查询时,不同表中的相同项设计不同测试数据进行验证;

    3)修改查询结果在数据表中对应项中的数据,使其为空值或客户端相应项的范围值的最大和最小值,查看接口输出是否正确。

    第三类:逻辑运算接口

           这类接口在收到请求数据之后,会进行一系列逻辑运算,然后根据处理结果更新数据库中的数据,通常涉及逻辑运算的接口有:比赛成绩同步、商品支付、各种数据报表等接口。以比赛成绩同步接口为例:

    比赛成绩同步接口

    『接口功能』:游戏服务器将用户每次的比赛成绩传给平台服务器,平台服务器根据用户的比赛成绩更新此用户的赛事排名,然后存入数据库。

    『接口方向』:游戏服务器—>平台服务器

    『遵循协议』:HTTPS+XML,请求消息使用Post方式

    参数名称

    参数类型

    参数长度

    说明

    userID

    Int

    10

    用户i-dong号

    webKey

    String

    64

    当前分配给指定登录用户的密钥

    key

    String

    50

    接口名称

    version

    String

    8

    版本号

    gymkanaCode

    String

    30

    当前比赛所参与的运动会,该参数为空说明只是普通用户的比赛

    sportItemID

    String

    50

    游戏项目的ID

    sportItemName

    String

    50

    游戏项目名称

    sportServerID

    String

    50

    游戏服务器IP

    matchSystem

    Int

    3

    竞速跑赛制:

    100米:1; 400米:2; 800米:4; 1500米:8; 4×100米:16;

    matchId

    String

    50

    该场次比赛唯一id

    record

    double

     

    当前用户成绩 (如record=8.123456)。非正常结束比赛时,即isWinner=3或4,如果是单人跑,isWinner=5,record=-1

    unit

    String

    20

    成绩单位

    isWinner

    Int

    2

    当前用户是否赢了0=输,1=赢,2=未完成,3=主动退出,4=被迫退出

    competitorID

    Int

    10

    对手idong号

    competitorRecord

    double

     

    当前对手成绩,规则同record

    competitorIsWinner

    int

    2

    对手输赢,规则同isWinner

    starttime

    String

    14

    开始时间(yyyy-MM-dd HH:mm:ss)

    endtime

    String

    14

    结束时间(yyyy-MM-dd HH:mm:ss)

    响应消息(sendMessageRes)

    参数名称

    参数类型

    参数长度

    说明

    resultCode

    Int

    5

    结果返回码,返回42000表示处理成功

    score

    Int

    11

    本次得分

    preRank

    Int

    11

    赛前积分在赛后的排名

    rank

    Int

    11

    积分排名

    upRankFlag

    Int

    1

    排名上升:1;排名不变:0;排名下降:-1

    isUpLevel

    Int

    1

    经验值是否升级 0 否;1 是

    exp

    Int

    11

    本次增加的经验值

    expLevel

    Int

    3

    经验值等级

    designation

    String

    30

    称号(对应于经验值)

    cPreRank

    Int

    11

    对手赛前积分在赛后的排名

    cRank

    Int

    11

    对手赛后积分排名

    cUpRankFlag

    Int

    1

    对手排名上升:1;排名不变:0;排名下降:-1

    encourageWord

    String

    15

    鼓励语句

        此接口比数据查询接口又更加复杂,除了用条件判断和数据查询类接口的策略对此接口进行测试用例设计之外,还需要验证对接口的算法规则进行检查,因为此接口涉及根据用户比赛成绩(record)进行排名然后返回其得分及排名情况(score、rank、upRankFlag、exp),通过对相关数据表中的数据进行查看方式,接口算法规则验证包括:

    1)用户胜利、失败、中途主动/被动退出、规定时间内未完成比赛情况下,此场比赛得分(scroe)是否正确;

    2)用户比赛成绩比上次成绩花费时间短、长、持平情况下,排名情况(upRankFlag)是否正确;

    3)用户比赛成绩处于第一名、最后一名、比上次成绩花费时间短/长/持平情况下,用户积分排名(rank)是否正确;

    4)用户胜利、失败、中途主动/被动退出、规定时间内未完成比赛,并且用户经验值在各种经验等级范围下,经验值根据得分进行计算的公式是否正确。

        逻辑运算接口由于还涉及插入或更新数据库操作,因此测试时还需要考虑数据库特性,如数据精度问题,在MySQL数据库中,如果是浮点型数据,存入时会有精度误差(131072.32插入float(10,2)类型的数据会变为131072.31),因此对于需要用于金额计算、数据统计、成绩比较的数据,最好使用定点型。

        最后服务器接口的测试如果有足够条件的话,还需要通过白盒测试来对接口代码做进一步的测试,通过编写关键代码的测试桩,可以有效查找将字符数组当成字符串使用造成的读越界这类不易通过黑盒测试发现的BUG。接下来的工作就是如何通过测试工具来执行服务器接口功能测试。

    展开全文
  • unittest实现HTTP接口功能测试

    千次阅读 2016-07-26 14:56:07
    实际上H5页面接口测试与传统的接口测试的基本思路是一致的,就是通过数据准备(包括正常和异常的参数)、接口调用、结果观察这三个流程来验证接口功能逻辑符合预期,并且对于未预期的异常情况较好的容错性和鲁棒...

    作者:vickygui

    一、背景

    目前主流的H5页面动态获取内容的方式是采用ajax异步请求后台数据实现实时刷新,实际上就是用GET/POST的HTTP请求后台接口,再将返回的数据(一般是json或xml格式)渲染在页面上,因此保证H5页面接口的功能正确性就成为了页面内容数据正确的关键,普通的H5页面测试通常会采用手工测试的方式,这样只能模拟到正常的场景,对于异常的数据请求是无法覆盖的,并且对于请求参数很多的情况,效率很低,另外还有一部分数据内容接口是无页面的,如外部合作接口,只提供数据,对应的页面由合作方自己来做,则无法采用手工的方式进行测试。

    实际上H5页面接口测试与传统的接口测试的基本思路是一致的,就是通过数据准备(包括正常和异常的参数)、接口调用、结果观察这三个流程来验证接口的功能逻辑符合预期,并且对于未预期的异常情况有较好的容错性和鲁棒性,只不过接口的调用参数形式有所不同,如下表所示。

    另外在H5页面接口测试中还需要根据接口的实际情况模拟请求的HTTP头部,这些也是验证接口数据和逻辑的一部分,这些都是与传统的接口测试不同的部分。

    文章接下来的部分就提供了一种能够完成H5页面接口测试的方法,主要应用于新开发的H5页面接口的功能测试。

    二、为什么选择unittest

    通过第一部分的阐述,我们对H5页面接口测试的基本流程有了了解,那么为了实现H5页面测试,我们就需要一种工具,它需要有以下功能:

    • 1、进行GET&POST请求调用
    • 2、模拟HTTP头部进行请求
    • 3、方便的构造参数
    • 4、丰富的断言库,对结果进行判断
    • 5、清晰的结果展示,SUCC /FAIL
    • 6、方便的运行和调试,用例FAIL时给出调试信息

    以上需求按照优先级排列,其中1和2是必须的,之前的测试工作中都是采用python来进行HTTP请求,原因是python中的requests库能够方便的模拟各种HTTP请求,并且调用非常简洁,因此很自然的想到了用python,而为了能够对结果进行断言并且清晰的展示测试结果,于是我们采用了unittest。

    三、什么是unittest

    unittest是python自带的单元测试模块,与java的单元测试框架junit类似,一个测试类中可以包含多个测试用例,每个用例以test_开头,执行前在setUp方法中进行初始化工作,执行后在tearDown方法中完成退出清理。多个测试类可以组成test suite同时进行测试。unittest同样包含丰富的断言库,可以对结果类型、内容等多个方面进行验证,在结果展示方面,在python的IDE Pycharm中能够得到清晰的结果以及错误信息,如下图。

    在上面的测试结果中,能够清晰的看到用例总数、运行的用例数及失败的用例数,点击左边的用例名称,可以看到失败信息,还可以直接跳至对应的出错行,最左边的功能区的第二个按钮可以重跑所有失败用例。最后对于执行失败的用例,只要在对于用例区域右击,选择对应的”Debug…”选项就可以单独调试用例以确定是否是测试用例的问题导致执行失败,从而保证结果的准确性。

    3.1 unittest基本用法

    下面是unittest的基本使用方法,不同的测试用例可能稍有不同,但思路是一致的。

      1. import unittest
      1. 定义一个继承自unittest.TestCase的测试用例类
      1. 定义setUp和tearDown,在每个测试用例前后做一些辅助工作
      1. 定义测试用例,名字以test开头
      1. 一个测试用例应该只测试一个方面,测试目的和测试内容应该很明确。进行了测试所需的操作后获取结果,然后调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符,unittest提供的结果断言主要有以下几个,后面的注释部分是各个断言的含义
      1. 调用unittest.main()启动测试
      1. 观察测试结果,根据结果调整脚本或反馈问题

    四、需要怎么做

    在开始编写测试用例之前需要确定接口的请求方式(GET/POST)、请求参数、请求所需的HTTP头部、返回的结果类型和内容基本要素等。其中请求参数又需要知道参数的类型、范围。根据这些信息能够组合出需要测试的场景,每一个场景就是一个测试用例,需要覆盖正常和异常的情况。

    一个基本的用例流程如下图:

    下面将逐一介绍如何实现H5页面接口的功能测试。

    4.1 请求参数设置

    这个部分需要根据测试场景设置所需的请求参数,包括调用参数和HTTP头部(主要是referer、content-type、cookie等),对于调用参数的多种正常组合,可以使用单个参数循环遍历然后组合的方式,只需要一个测试用例即可,这样可以减少用例编写的工作量以及维护的成本。

    4.2 接口调用

    接口调用可以采用python的第三方库—Requests实现,Requests基于urllib,采用Apache2 Licensed开源协议的HTTP库,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。它比 urllib 更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。

    使用requests进行HTTP请求非常简单,下面分别是GET和POST基本请求:

    GET:

    Requests允许使用 params 关键字参数,以一个字典来提供这些参数。上面的代码将请求URL:http://httpbin.org/get?key2=value2&key1=value1

    POST:

    对于POST请求,requests还支持自动编码,只要将请求body传入json关键字参数即可,上面的代码将请求http://httpbin.org/post且请求body为:{“key1”: “value1”, “key2”: “value2”},如果请求body不是json格式,而是string格式,可以用data关键字参数直接设置。另外requests还会对参数自动进行URL编码。

    如果需要为请求添加HTTP头部,只要简单地传递一个 dict 给头部 参数即可:

    上面的代码示例是POST请求,当然对于GET请求也是同样的。

    对于请求得到的响应,requests也有丰富的方法处理,比较关键的几个方法:

    上面代码执行后,code是响应的状态码,r_text是响应的内容,r_json是响应内容的json格式。

    4.3 结果断言

    得到了响应的状态和内容之后,就可以利用unittest的断言库对结果进行校验了,首先需要校验的是响应的状态码,上面介绍了如何得到响应的状态码,直接与预期值进行判等,如:

    其次是响应头,可能需要对Content-Type、Content-Length等关键字段进行验证,同样从响应中获取对应字段的值,然后直接用asserTrue断言去验证。

    最后是响应的内容,HTTP接口的响应的内容一般来说有三种格式:json(最主要)、xml和html,对于json格式的响应可以直接用requests自带的json解析器进行解析,然后判断其中的关键key的值等,如下面的代码断言响应中的”success”是否为”True”;对于xml格式的响应,可以先获取响应的文本内容然后采用python的第三方类库如:lxml等,将xml文本转成标签树,然后通过对应的xpath读取值并进行校验;对于html格式的响应,获取响应的文本内容后用正则匹配或者xpath来得到需要校验的值。

    总结

    本文主要介绍了一种利用python第三方类库requests及单元测试工具unittest实现H5页面接口功能测试的方法,主要运用场景是对于新开发的H5页面接口的功能测试,能够模拟到手工测试无法覆盖的异常场景并且有效降低测试工作量,并且能反复测试,快速验证问题。当然对于功能已经比较稳定的接口,需要其他的H5页面接口测试工具对接口进行监控及质量保证,多种方式结合才能更好的把控H5页面接口的质量。

    本章完~~

    本文连接:http://tmq.qq.com/2016/07/unittest_for_h5_interface_test/


    TMQ(腾讯移动品质中心)是腾讯最早专注在移动APP测试的团队
    我们专注于移动测试技术精华,饱含腾讯多款亿级APP的品质秘密,文章皆独家原创,我们不谈虚的,只谈干货!

    扫码关注我们

    扫一扫 关注TMQ
    精彩分享不断
    展开全文
  • Unittest实现H5页面接口功能测试

    千次阅读 2016-10-21 18:23:28
    目前主流的H5页面动态获取内容的方式是采用ajax异步请求后台数据实现实时刷新,实际上就是用GET/POST的HTTP请求后台接口,再将返回的数据(一般是json或xml格式)渲染在页面上,因此保证H5页面接口功能正确性就...

    原文  http://tmq.qq.com/2016/07/h5interfacetestwithunittest/

    一、背景

    目前主流的H5页面动态获取内容的方式是采用ajax异步请求后台数据实现实时刷新,实际上就是用GET/POST的HTTP请求后台接口,再将返回的数据(一般是json或xml格式)渲染在页面上,因此保证H5页面接口的功能正确性就成为了页面内容数据正确的关键,普通的H5页面测试通常会采用手工测试的方式,这样只能模拟到正常的场景,对于异常的数据请求是无法覆盖的,并且对于请求参数很多的情况,效率很低,另外还有一部分数据内容接口是无页面的,如外部合作接口,只提供数据,对应的页面由合作方自己来做,则无法采用手工的方式进行测试。

    实际上H5页面接口测试与传统的接口测试的基本思路是一致的,就是通过数据准备(包括正常和异常的参数)、接口调用、结果观察这三个流程来验证接口的功能逻辑符合预期,并且对于未预期的异常情况有较好的容错性和鲁棒性,只不过接口的调用参数形式有所不同,如下表所示。

    另外在H5页面接口测试中还需要根据接口的实际情况模拟请求的HTTP头部,这些也是验证接口数据和逻辑的一部分,这些都是与传统的接口测试不同的部分。

    文章接下来的部分就提供了一种能够完成H5页面接口测试的方法,主要应用于新开发的H5页面接口的功能测试。

    二、为什么选择Unittest

    通过第一部分的阐述,我们对H5页面接口测试的基本流程有了了解,那么为了实现H5页面测试,我们就需要一种工具,它需要有以下功能:

    1、进行GET&POST请求调用

    2、模拟HTTP头部进行请求

    3、方便的构造参数

    4、丰富的断言库,对结果进行判断

    5、清晰的结果展示,SUCC /FAIL

    6、方便的运行和调试,用例FAIL时给出调试信息

    以上需求按照优先级排列,其中1和2是必须的,在之前的测试工作中用python来进行HTTP请求,原因是python的第三方库能够方便的模拟各种HTTP请求,并且调用非常简洁,因此很自然的想到了用python,同时为了能够对结果进行断言并且清晰的展示测试结果,我们采用了Unittest。

    三、什么是Unittest

    Unittest是python自带的单元测试模块,与java的单元测试框架junit类似,一个测试类中可以包含多个测试用例,每个用例以test_开头,执行前在setUp方法中进行初始化工作,执行后在tearDown方法中完成退出清理。多个测试类可以组成test suite同时进行测试。Unittest同样包含丰富的断言库,可以对结果类型、内容等多个方面进行验证,在结果展示方面,使用python IDE Pycharm能够得到清晰的结果以及错误信息,如下图所示。

    在上面的测试结果中,能够清晰的看到用例总数、运行的用例数及失败的用例数,点击左边的用例名称,可以看到失败信息,还可以直接跳至对应的出错行,最左边的功能区的第二个按钮可以重跑所有失败用例。对于执行失败的用例,只要在对于用例区域右击,选择对应的”Debug…”选项就可以单独调试用例以确定是否是测试用例的问题导致执行失败,从而保证测试结果的准确性。

    3.1 Unittest基本用法

    下面是Unittest的基本使用方法,不同的测试用例可能稍有不同,但思路是一致的。

    1) import Unittest

    2) 定义一个继承自Unittest.TestCase的测试用例类:

    3) 定义setUp和tearDown,在每个测试用例前后做一些辅助工作:

    4) 定义测试用例,名字以test开头:

    5) 编写用例,一个测试用例应该只测试一个方面,测试目的和测试内容应该很明确。进行了测试所需的操作后获取结果,然后调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符,Unittest提供的结果断言主要有以下几个,后面的注释部分是各个断言的含义:

    6) 调用Unittest.main()启动测试:

    7) 观察测试结果,根据结果调整脚本或反馈问题。

    四、需要怎么做

    在开始编写测试用例之前需要确定接口的请求方式(GET/POST)、请求参数、请求所需的HTTP头部、返回的结果类型和内容基本要素等。其中请求参数又需要知道参数的类型、范围。根据这些信息能够组合出需要测试的场景,每一个场景就是一个测试用例,需要覆盖正常和异常的情况。一个基本的用例流程如下图:

    下面将逐一介绍如何实现H5页面接口的功能测试。

    4.1 请求参数设置

    这个部分需要根据测试场景设置所需的请求参数,包括调用参数和HTTP头部(主要是referer、content-type、cookie等),对于调用参数的多种正常组合,可以使用单个参数循环遍历然后组合的方式,只需要一个测试用例即可,这样可以减少用例编写的工作量以及维护的成本。

    4.2 接口调用

    接口调用可以采用python的第三方库—Requests实现,Requests基于urllib,采用Apache2 Licensed开源协议的HTTP库,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。它比 urllib 更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。使用Requests进行HTTP请求非常简单,下面分别是GET和POST基本请求。

    GET:

    Requests允许使用 params 关键字参数,以一个字典来提供这些参数。上面的代码将请求URL:http://httpbin.org/get?key2=value2&key1=value1。

    POST:

    对于POST请求,requests支持自动编码,只要将请求body传入json关键字参数即可,上面的代码将请求http://httpbin.org/post且请求body为:{“key1”: “value1”, “key2”:“value2”},如果请求body不是json格式,而是string格式,可以用data关键字参数直接设置。另外requests还会对参数自动进行URL编码。

    如果需要为请求添加HTTP头部,只要简单地传递一个 dict 给头部参数即可:

    上面的代码示例是POST请求,当然对于GET请求也是同样的。

    对于请求得到的响应,requests也有丰富的方法处理,比较关键的几个方法:

    上面代码执行后,code是响应的状态码,r_text是响应的内容,r_json是响应内容的json格式。

    4.3 结果断言

    得到了响应的状态和内容之后,就可以利用Unittest的断言库对结果进行校验了,首先需要校验的是响应的状态码,上面介绍了如何得到响应的状态码,直接与预期值进行判等,如:

    其次是响应头,可能需要对Content-Type、Content-Length等关键字段进行验证,同样从响应中获取对应字段的值,然后直接用asserTrue断言去验证。

    最后是响应的内容,HTTP接口的响应的内容一般来说有三种格式:json(最主要)、xml和html,对于json格式的响应可以直接用requests自带的json解析器进行解析,然后判断其中的关键key的值等,如下面的代码断言响应中的”success”是否为”True”;对于xml格式的响应,可以先获取响应的文本内容然后采用python的第三方类库如:lxml等,将xml文本转成标签树,然后通过对应的xpath读取值并进行校验;对于html格式的响应,获取响应的文本内容后用正则匹配或者xpath来得到需要校验的值。

    五、总结

    本文主要介绍了一种利用python第三方类库requests及单元测试工具Unittest实现H5页面接口功能测试的方法,主要运用场景是对于新开发的H5页面接口的功能测试,能够模拟到手工测试无法覆盖的异常场景并且有效降低测试工作量,并且能反复测试,快速验证问题。当然对于功能已经比较稳定的接口,需要其他的H5页面接口测试工具对接口进行监控及质量保证,多种方式结合才能更好的把控H5页面接口的质量。

    展开全文
  • 先了解一下Fiddler Everywhere的基本用法,然后再看一下它的AutoResponder功能。AutoResponder主要用来mock接口的数据,在web调试的时候非常方便...

    先了解一下Fiddler Everywhere的基本用法,然后再看一下它的AutoResponder功能。

    AutoResponder主要用来mock接口的数据,在web调试的时候非常方便,比如你想验证前端列表展示有没有取错字段,你就可以mock接口返回结果,然后刷新页面后看看列表的数据是否变化。

    AutoResponder 请求匹配规则的常见用法

    1、直接匹配*,拦截篡改所有请求

    此方法会拦截所有请求,不推荐使用,电脑上所有请求都会被拦截进行响应结果的修改。

    该用法不太稳定,比如你一直不停的访问同类型的结果访问,就有可能出现无法响应的情况。用腾讯课堂的不同的连接测试过,有时候会偶现无法获取响应结果的情况。

    2、匹配某个字符串 (不区分大小写)

    访问以下3个地址,都会自动返回执行的结果:

    http://www.eryajf.net/63.html

    http://www.eryajf.net/77.html

    http://www.eryajf.net/56.html

    3、使用EXACT关键字进行完全匹配

    以EXACT开头表示完全匹配,用法如下:

    4、使用REGEX关键字进行正则匹配

    .+ :匹配一个或多个字符
    .* :匹配0个或多个字符
    ^ :匹配字符串开始位置
    $ :匹配字符串结尾位置

    regex:(?inx).+\.(gif|png|jpg)$ #匹配所有gif|png|jpg结尾的请求

    5、使用NOT关键字

    如 NOT:8081  则表示请求url中没有包含8081的请求多会被自动响应

    6、通过body中特定内容拦截请求

    假设现在有这么一个接口,url都是http://127.0.0.1:8080/server/doServer.do,具体的传参是在body里面去控制的 ,body里面有一个参数method,表示当前调用的是哪个接口,如果这个时候想根据body的内容去进行mock的话 ,可以使用如下的规则去进行配置:

    可以用类似下面的配置:

    # URLWithBody:url地址 regex:^.*body中的参数值.*$
    URLWithBody:http://127.0.0.1:8080/server/doServer.do regex:^.*method.*$
    URLWithBody:regex:.*127.0.0.1:8080.* regex:^.*method.*$
    

    这种场景适用于,url上面没法区分是哪个接口,需要通过body里面不通过的传参去模拟返回不同的数据的时候,可以使用这种匹配规则。url地址也支持用正则匹配。

    7、通过Headers中指定的参数去匹配

    使用方法如下:

    Fiddler软件中给出的样例是使用Header:Accept=html,即使用Header里面的Accept参数去校验,我测试过 ,在目前的1.0.2版本中使用Accept-Encoding、Accept-Language参数也可以匹配到 ,但是使用Header中的其他参数去匹配的话,目前是匹配不上的,因此这个用法要慎用,并不是支持header中的所有参数。

    配置如下规则:Header:Accept-Language=zh-CN,zh;q=0.9,en;q=0.8

    配置好之后,再访问百度首页,出现的结果如下,页面显示的结果跟配置规则下的显示结果是一致的:

    AutoResponder 请求匹配规则的常见用法

    1、直接返回某个指定的字符串(Return manually crafted response)

    2、使用某个指定的文件内容进行返回(Choose saved response file...)

    3、直接使用某个网页的地址替换接口返回结果

    访问效果:

    以上只介绍常用的用法,更多的规则匹配和详细的描述,请参考官网的介绍:

    https://docs.telerik.com/fiddler-everywhere/user-guide/live-traffic/autoresponder

    总结

      

         通过以上描述,相信大家对Fiddler Everywhere工具的Auto Response功能有了一定的了解,该功能主要用来mock服务的接口的数据,在做功能测试的过程中,,这个功能是非常实用的。下面为大家介绍一下我在实际工作中用到的几个简单的应用场景:

    ‍‍一、用于辅助测试,快速验证前端页面的一些逻辑处理是否符合预期

    1、前端对某列数据做四舍五入的处理,一时之间找不到符合要求的数据的时候,就可以使用该功能,篡改接口响应结果给前端,从而验证是否有bug。

    2、前端某列显示金额字段,当金额的数值超过某个值的时候,显示格式要进行转换,一时之间找符合要求的数据比较麻烦的时候,就可以使用工具的这个功能快速的辅助你进行测试。

    3、前端更改了某个明细字段的长度,但是在测试环境可能汇总指标的值为0,导致你进不去明细页面,看不到效果,那么可以篡改响应结果,把汇总的值由0改成其他值,绕过前端的校验。

    二、用于辅助验证后端的处理逻辑

    1、登录后能点击哪些菜单或按钮,是通过后端接口返回的,没权限的时候,前端控制不可点击。那如果篡改后端数据,新加入一个没有权限的接口返回前端,然后在页面上再去操作的时候,查看后端是否对权限做了二次校验。

    2、有时候为了测试方便,会将生产的部分数据导入sit环境进行测试,但是有的基础数据又没导入,可能会存在在页面查询不到生产的数据 ,因为查询条件中选不到生产的某个网点,或者说id不匹配,这个时候就可以把查询接口中的接口响应结果用生产的接口的数据替换一下进行返回。‍‍                                                                                                    

    以上是小编为大家整理的Fiddler Everywhere工具的Auto Response功能的基本使用方法,并结合自己在项目中使用的场景进行了分享,这些用法同样可以用fiddler去进行实现。如果对大家有帮助,可以分享给身边的朋友一起学习喔!

    往期推荐

    SonarQube环境搭建

    特定场景下才能复现的bug案例分享之--前端排序字段的锅

    Postman+Newman+Git+Jenkins实现接口自动化测试持续集成

    Fiddler Everywhere v1.0.1版本基础功能介绍

    一篇文章为你揭秘pytest的基本用法

    App自动化测试之Appium环境搭建

    Jenkins自动部署测试环境之jar包部署

    python高级用法之命名元组namedtuple

    展开全文
  • 短信验证码接口示例,如何接入短信API接口实现短信自动发送功能; 网站如何实现自动发送短信验证码的功能,短信验证码技术文档需要哪些参数,网站点击触发验证码的功能实现的方法,通过调用API接口的方式实现短信...
  • 支付宝即时到账接口改双功能接口.txt 作者Attilax , 1466519819@qq.com  $service = "reate_direct_pay_by_user 即时到账交易 改成 $service = "trade_create_by_buyer"; 增加以下参数  //ati ...
  • 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):...
  • 接口

    万次阅读 2018-06-10 00:10:12
    接口(核心)基本概念:在之前讲解的类结构都包含:普通属性,常量(全局常量),构造方法,抽象方法,但是如果说设计一个类的时候发现这个类的内部只存全局常量和抽象方法的话,则这个类就能将其定义为接口接口...
  • 我们今天就来探讨下如何更好的设计好这个看似小的功能给APP设计一个获取手机验证码的接口根据业务逻辑,初步总结了可能会有以下业务场景 需要用到手机验证码的验证功能大家来看下图片吧login:登录 register:注册 ...
  • 公司目前功能需要,需要使用Springboot+Apache Camel的Rest组件集成实现类似ESB(服务总线的功能),使用的配置方式是xml dsl,配置信息如下:但由于本人之前没有怎么深入了解过Apache Camel的使用,在调用目前的...
  • 接口测试简介以及接口测试用例设计思路

    万次阅读 多人点赞 2018-09-07 11:50:27
    接口测试简介 1.什么是接口 接口就是内部模块对模块,外部系统对其他服务提供的...开发所谓的接口是模块模块之间的一种连接,而测试眼中的接口是一种协议(对接口功能的一种定义) 2.接口的种类和分类 外部接...
  • 接口测试工具Postman使用实践

    万次阅读 多人点赞 2017-12-05 16:18:55
    接口测试工具Postman使用实践本次chat内容包括: 接口的定义 接口的分类 为何要进行接口测试 接口文档示例 Postman工具简介 借助Postman完成HTTP请求接口测试 Postman + Newman + Jenkins 实现接口自动化测试 一、...
  • 几款常见接口管理平台对比

    万次阅读 2020-05-11 22:59:16
    为了方实现接口规范,团队协作,工程规范,接口Mock,接口测试等功能,项目开发需要一个接口管理平台,通过查询发现国内主要有以下几款接口管理平台,并对这几款接口管理平台进行了对比,结果如下 Eolinker EOLINKER...
  • 接口测试 | 接口测试入门

    万次阅读 多人点赞 2018-02-24 13:08:37
    接口测试讲义 1. 接口测试的类型 主要包含三种测试: Web接口测试, 应用程序接口(API, application programming interface)测试, 数据库测试。 实际上意义就是UI界面到数据库之间,数据流...
  • 第一篇,包括:缘起、技术需求、功能规划、功能设计。
  • 无规矩不成方圆,为了开发人员间更好的配合,我特意整理了这么一篇文档供大家参考学习,如意见、见解,请在评论区留言探讨。 接口规范说起来大,其实也就那么几个部分,接口规范、接口管理工具、接口文档编写、...
  • 操作系统特征、功能和用户接口

    千次阅读 2012-07-01 16:46:18
    1、操作系统特征 ( Characteristics of OperatingSystems ) ...在多道程序环境下,并发性是指宏观上在一段时间内多道程序在同时执行。但在单处理机系统中,每一个时刻仅能执行一道程序,故微观上,这些
  • 做微信社交立减金,需要微信开通免充值产品功能。 获取验签秘钥沙箱接口:https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey 0.获取到的密钥是替换原有支付密钥的. 1.请求格式是xml,这个在文档没写. ...
  • COM接口

    千次阅读 2019-01-27 17:57:59
    COM 接口什么是 COM?接口的结构与描述使用 C++/C/Delphi 描述接口IDL接口的标识COM 数据类型MIDL 编译器IUnknown 接口接口继承接口查询规则 什么是 COM? COM 全称为 Component Object Model,是微软为了计算机...
  • 操作系统的功能和目标(1)作为计算机系统资源的管理者1️⃣处理器(CPU)管理2️⃣存储器管理3️⃣文件管理4️⃣设备管理(2)作为用户与计算机硬件系统之间的接口1️⃣命令接口2️⃣程序接口(3)作为扩充机器...
  • 功能需求:微信公众号里网页需要调用扫一扫功能 实现工具:微信JS-SDK接口 接口官方文档:微信JS-SDK说明文档 微信JS-SDK介绍: 微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。 ...
  • 什么是接口? 业内常说的接口一般指两种: API:应用程序编程接口,程序间的接口 GUI:图形用户界面,人与程序的接口 软件接口测试中的接口特指API接口 接口测试又称API测试 接口实例:系统与系统间的接口调用,...
  • 接口自动化测试之接口测试基础

    万次阅读 多人点赞 2020-02-11 13:29:38
    说明:该篇博客是博主一字一码编写的...接口测试3.1 接口测试的含义3.2 接口测试的意义3.2.1 为什么测试接口3.2.2 接口测试的意义3.3 协议接口的分类3.3.1 按系统不同的调用方式进行分类3.3.2 按协议的不同进行分类3...
  • 摄像头的MIPI接口、DVP接口和CSI接口

    千次阅读 2021-03-17 11:47:47
    我们常用的电脑摄像头接口是USB接口,而常见的智能手机上的摄像头是MIPI接口,还有一部分的摄像头(比如说某些支持DVP接口的硬件)是DVP接口;通俗的讲,USB是串行通用串行总线(Universal Serial Bus)的简称,而...
  • CMMI之功能点估算法---内部逻辑文件和外部接口文件

    千次阅读 多人点赞 2018-04-28 11:40:00
      功能点分析的步骤 在本文中将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础与大家...计算数据类型功能点所提供的未调整的功能点数量。 计算人机交互功...
  • 随着显示器的发展,它所拥有的接口也越来越多在这种情况下,很多人对于显示器的那些接口到底是干什么用的,也就越来越迷糊。甚至一些经常关注IT的朋友,也同样如此。一些JS或者厂商,正是看到了这一点,经常在...
  • 什么是接口测试

    万次阅读 2017-01-12 15:59:06
    什么是接口测试本来想写篇接口测试的基础文章,但看到这个,就偷个懒用Google翻译搬过来,想看原文的点这里http://www.softwaretestingmagazine.com/knowledge/api-testing-definition/,之后博主再整理更新更多关于...
  • 如何进行接口测试,如何做好接口测试

    万次阅读 多人点赞 2018-03-24 10:39:15
     接口无非两种,一种是内部接口,一种调用对外包装的接口 内部接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,例如下订单,首先你需要登录,然后调用下订单接口,两个模块交互那么相互之间...
  • 接口测试是什么?什么意义?

    万次阅读 多人点赞 2019-06-04 17:50:45
    文章目录一、什么是接口?二、软件测试模型三、接口测试的意义1. 更早的发现问题2. 缩短产品周期3. 发现更底层的问题四、接口测试策略 对于测试人员来说,掌握接口测试基本上已经成为一个标配的能力了,但是对于...
  • 写在前面:这是我最近整理的接口规范文档,无规矩不成方圆,为了app开发人员与后台接口开发人员更好的配合,我...以下将详细介绍,下面进入正文:接口规范文档具体内容如下:一:协议规范二:域名规范三:版本控制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 845,380
精华内容 338,152
关键字:

以下属于接口功能的有