天天看點

接口測試的兩種方法

  接口測試位址:/sns/publish

  請求封包參數說明:

參數名稱

參數描述

字元類型

字元值

snsid

社群id

string

6

userid

使用者id

10

commentstypeid

評論類型id

2

commentsid

評論id

authorid

作者id

commentscontent

評論内容

50

  請求封包格式:

<?xml version="1.0" encoding="iso-8859-1"?>

< publish >

<snsid>123</snsid>

<userid>456</ userid >

<commentstypeid>2</ commentstypeid >

<commentsid>123</commentsid>

<authorid>456</authorid>

<commentscontent>don't forget the meeting!</commentscontent >

</publish>

  應答封包的參數接口說明:

statuscode

傳回值

int

0代表pass,非0代表fail

statustext

傳回資訊描述

<statuscode>0</statuscode>

<statustext>發送成功一條評論</statustext>

  有了上述的說明書之後,測試人員可以根據文檔的描述在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做接口測試少。

  以上純屬個人見解,敬請拍磚!

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/