LR进行接口测试
其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程。
方法一、用LoadRunner实现接口测试
大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候。开发人员开发出来的接口,提供给测试人员详细的接口使用说明书,该说明书最基本的要求如下:
接口测试地址:/SNS/Publish
请求报文参数说明:
|
参数名称 |
参数描述 |
字符类型 |
字符值 |
|
SNSID |
社区ID |
String |
6 |
|
UserID |
用户ID |
String |
10 |
|
CommentsTypeID |
评论类型ID |
String |
2 |
|
CommentsID |
评论ID |
String |
10 |
|
AuthorID |
作者ID |
String |
10 |
|
CommentsContent |
评论内容 |
String |
50 |
请求报文格式:
|
<?xml version="1.0" encoding="ISO-8859-1"?> |
应答报文的参数接口说明:
|
参数名称 |
参数描述 |
字符类型 |
字符值 |
|
UserID |
用户ID |
String |
10 |
|
CommentsTypeID |
评论类型ID |
String |
2 |
|
CommentsID |
评论ID |
String |
10 |
|
CommentsContent |
评论内容 |
String |
50 |
|
StatusCode |
返回值 |
Int |
0代表pass,非0代表fail |
|
StatusText |
返回信息描述 |
String |
| <?xml version="1.0" encoding="ISO-8859-1"?> < Publish > <UserID>456</ UserID > <CommentsTypeID>2</ CommentsTypeID > <CommentsID>123</CommentsID> <CommentsContent>Don't forget the meeting!</CommentsContent > <StatusCode>0</StatusCode> <StatusText>发送成功一条评论</StatusText> </Publish> |
有了上述的说明书之后,测试人员可以根据文档的描述在LoadRunner书写相应的接口测试脚本。
LoadRunner中涉及到向服务器发送请求的API方法包括:web_url(),web_submit_form(),web_submit_data(),web_custom_request()。下面介绍两种我常用的方法:
第一种:使用web_submit_data()
| web_submit_data("insert", "Action=http://116.211.23.123/SNS/Publish.htm ", "Method=POST", "Referer=http://116.211.23.123/SNS/Publish.htm ", "Mode=HTML", ITEMDATA, "Name= SNSID ","Value=6601",ENDITEM, "Name= UserID ","Value=123",ENDITEM, "Name= CommentsTypeID ","Value=1",ENDITEM, "Name= CommentsID ","Value=456",ENDITEM, "Name= AuthorID","Value=789",ENDITEM, "Name= CommentsContent ","Value=Just for testing",ENDITEM, LAST); |
第二种:使用web_custom_request()
| char str[1000]; strcpy(str,"SNSID=7999&UserID=1&CommentsTypeID=1&CommentsID=1&AuthorID=1&CommentsContent=1"); web_custom_request("Publish", "Url= http://116.211.23.123/SNS/Publish.htm", "Method=POST", "Referer=http://116.211.23.123/SNS/Publish.htm ", "Mode=HTTP", str, LAST); |
这也是一种写法,可以跟web_submit_data互换。这种写法更利于拼接参数。
方法一适合一些xml结构的根元素下的子元素同处于根元素下面,且子元素数目较少的情况下,如果xml结构比较复杂,比如说根元素下面有多级子元素,或者xml树结构分叉较多的时候,我们可以先把xml拼接成一个字符串然后通过web_custom_request()向服务器发送请求。
我们在做接口功能测试的时候会很注意接口的应答报文的信息,这时候我们可以通过LoadRunner的日志信息查看或者可以通过web_reg_find()或者web_find()这样的API函数来统计接口的运行结果,推荐使用web_reg_find(),web_reg_find()和web_find()区别请大家百度一下,详细信息太多,在这里不便叙述。
因为web_reg_find()是注册型函数,所以应该放在web_submit_data()或者web_custom_request()的前面。
如:
| web_reg_find("Text=<StatusCode>0</StatusCode>",//应答报文里边的信息 "SaveCount= StatusCodeCount", //统计查询字段的信息,如果找到值为1,如果未找到值为0 LAST); |
在脚本的最后我们可以对查询字段的信息进行统计
| // Check result if (atoi(lr_eval_string("{StatusCodeCount }")) > 0){ //判断如果Welcome字符串出现次//数大于0 lr_output_message("Send out the comment successfully."); }//在日志中输出Send out //the comment successfully else{ //如果出现次数小于等于 lr_error_message("Send out the comment unsuccessfully."); //在日志中输出Send out //the comment successfully return(0); } |
总结:用LoadRunner做接口测试无法做到把接口参数和程序分理,接口的参数可以通过参数化的方法来实现对同一个参数多个数据的测试。参数化后的测试数据保存在此脚本的保存位置下。
方法二、通过Java + Fitnesse实现接口功能测试
什么是Fitnesse?
FitNesse是一套软件开发协作工具 FitNesse是帮助大家加强软件开发过程中的协作的工具。能够让客户、测试人员和开发人员了解软件要做成什么样,帮助建议软件最终是否达到了设计初衷。
FitNesse是一套软件测试工具 从另外一个角度看,FitNesse是一个轻量级的、开源的框架,能够帮助开发团队方便的定义验收测试(Acceptance Tests),通过在web页面上简单的输出和预计输出的表格就可实现,并且可以运行这些测试以确定是否通过。
FitNesse是wiki可以很方便的创建和编辑页面 FitNesse是一个web服务器不用过多的安装配置,很方便使用。
我习惯使用Eclipse集成开发工具写测试代码,用fitnesse准备接口的测试数据,由此实现接口的测试数据和测试程序的分离。
关于Fitnesse的使用大家可以参考官方网址。Fitnesse的四种常见表格是:
ColumnFixture,ActionFixture,Decision Table,ScriptTable。在工作中ColumnFixture用的最多。
下面的程序使用的是ColumnFixture表格。
| // Java fixtures package info.fitnesse.fixturegallery; import fit.ColumnFixture; public class PublishTest extends ColumnFixture { //通过url向服务器发送请求的程序段省略 public StringSNSID; //对应列名|first part| public StringUserID; //对应列名|second part| private StringCommentsTypeID; private StringAuthorID; private StringCommentsContent; private StringUserID; //对参数的set和get方法省略 } ColumnFixture表格里边的测试数据是: //省略设置表格的存储位置信息 |
总结:上述两种方法都是对接口做功能测试的方法,使用LoadRunner做接口测试的时候可以不用让开发人员提供测试人员相应的UI测试页面,直接调用接口做测试,但是测试程序和数据的依赖性太强;使用Fitnesse做接口测试的时候可以实现测试程序和数据的分离,只用点击Fitnesse界面的Test按钮就可以实现测试,测试消耗时间比使用LoadRunner做接口测试少。
以上纯属个人见解,敬请拍砖!
LR进行接口测试的更多相关文章
- LoadRunner接口工作总结
因为工作中需要开发维护类似枢纽性质的平台,所以经常利用LR进行接口测试.接口自动化测试.接口压力测试.用多了LR,有点不愿意使用报文编辑器进行手工接口测试了. 接口脚本操作过程: 首先:打开LR,N ...
- LR接口测试---Java Vuser之增删改查
import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- LR接口测试---Java Vuser之jdbc查询(调试前)
在eclipse下编写好的代码: import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import ...
- LR接口测试手工脚本与验证脚本
Action(){ char URL[250]; char mars_cid[30]; memset(URL,0,sizeof(URL)); memset(mars_cid,0,sizeof(mars ...
- LR接口测试---socket
前提条件: 编译:javac TcpServer.java 启动:java TcpServer ============================================ 代码示例: # ...
- LR接口测试---webservices
//================================================================================== /* //事务开始 lr_st ...
- LR接口测试---基于http协议之get/post
get请求代码: //=====================get interface======================== 以http状态码方式: //获取返回的HTTP状态码判断请求 ...
- LR接口测试案例(录制)
- LR常用函数以及调用自定义函数
2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...
随机推荐
- 1. 通俗易懂解释知识图谱(Knowledge Graph)
1. 通俗易懂解释知识图谱(Knowledge Graph) 2. 知识图谱-命名实体识别(NER)详解 3. 哈工大LTP解析 1. 前言 从一开始的Google搜索,到现在的聊天机器人.大数据风控 ...
- Sortable拖拽排序插件数据筛选
后台有拖拽排序功能,然而前段在开发的时候,一整页的数据都发给后端了. 于是查看前端代码,想到了如下解决办法,即先把排序前的保存,然后对比排序后的,有差异的才发回给后端. var new_ids_ord ...
- python 获取有关访问者的浏览器的 细节
检测访问者的浏览器和版本号有关访问者的浏览器的更多信息有关访问者的浏览器的全部细节根据浏览器来提醒用户 <html><body><script type="te ...
- C#中的volatile关键字
volatile 关键字指示一个字段可以由多个同时执行的线程修改. 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制. 这样可以确保该字段在任何时间呈现的都是最新的值. vo ...
- Android——线程通讯类Handler(转)
原文地址:http://uule.iteye.com/blog/1705951 handler是线程通讯工具类.用于传递消息.它有两个队列:1.消息队列2.线程队列 消息队列使用sendMessage ...
- udev简述
udev 是 Linux 内核的设备管理器.总的来说,它取代了devfs和hotplug,负责管理/dev中的设备节点.同时,udev 也处理所有用户空间发生的硬件添加.删除事件,以及某些特定设备所需 ...
- python List的一些相关操作
把一些基础的东西归类整理,作记录. 添加元素 a=[7,8,9,10] a.append('a') #在最后位置添加 a.insert(1,'b') #在指定位置添加 删除元素 del a[1 ...
- JQuery控制radio选中和不选中方法总结
一.设置选中方法 代码如下: $("input[name='名字']").get(0).checked=true; $("input[name='名字']"). ...
- Linux的内存管理
Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经 ...
- SAP OBYC自动记账的实例说明 +VALUE STRING
对Value String定义:定义了一系列的步骤优先顺序,每一个步骤都连接到不同的过账事务码,而这个顺序本身就称作价值串.价值串你可以看作是一种记账的规则,为物料移动或者发票校验包含了一系列的科目分 ...