做接口測試中,對於一般性的單業務接口測試很多工具可供選擇,但是對於一些相關業務相關性的關聯接口測試就比較麻煩,使用工具比如jmeter、postman、soapui等等就比較麻煩。我比較偏重腳本化執行測試用例,所以選擇了groovy作爲主要語言來進行接口測試,但是腳本依賴的庫還是基於之前所在的java爲主的測試框架,有興趣的可以翻翻以前的文章。項目的架構思路是以模塊爲基礎把接口分類,然後對於接口的請求單獨進行實現。通過一個user作爲一個用戶,攜帶各種屬性,如:uname,pwd,token,userinfobean等信息。來作爲各個模塊類之間的信息傳遞。
回到修改密碼接口,簡單說一下我們接口的邏輯,先登錄,獲取token作爲用戶身份的唯一校驗值,修改密碼接口參數,newpwd,oldpwd,token。成功之後會返回新的token,作爲用戶繼續其他操作的校驗值。
分享一下自己的測試腳本代碼:
class T8 extends OkayBase {
public static void main(String[] args) {
int thread =changeStringToInt(args[0])
int times =changeStringToInt(args[1])
List<ThreadBase> threads = new ArrayList<>()
for (int i = 0; i < thread; i++) {
OkayBase base = getBase(i)
UserCenter userCenter = new UserCenter(base)
userCenter.modifyPwd()
ThreadBase threadBase = new ThreadBase() {
@Override
protected void before() {
}
@Override
protected void doing() throws Exception {
userCenter.modifyPwd()
}
@Override
protected void after() {
}
}
threadBase.setTimes(times)
threads.add(threadBase)
}
new Concurrent(threads).start()
allOver()
}
}
main方法留了兩個參數表示線程數和單線程請求數,下面是usercenter的主要代碼。
public class UserCenter extends OkayBase {
private static Logger logger = LoggerFactory.getLogger(UserCenter.class);
public UserCenter(OkayBase okayBase) {
super(okayBase);
}
public JSONObject modifyPwd() {
String url = UserApi.MODIFY_PWD;
JSONObject params = getParams();
params.put("newpwd", getPassword(this.getUname()));
params.put("oldpwd", getPassword(this.getPwd()));
JSONObject response = getPostResponse(url, params);
output(response);
if (isRight(response)) {
String string = response.getJSONObject("data").getString("token");
this.setToken(string);
}
return response;
}
}
下面是okaybase的主要代碼:
public class OkayBase extends SourceCode implements IBase {
private static Logger logger = LoggerFactory.getLogger(OkayBase.class);
int uid;
String token;
String uname;
String pwd;
public OkayBase(String uname, String pwd) {
this.uname = uname;
this.pwd = pwd;
login();
}
public String getPassword() {
String s = uname.substring(uname.length() - 6);
return getPassword(s);
}
public String getPassword(String pwd) {
return RSAUtils.getPassword(pwd);
}
public JSONObject getParams() {
JSONObject json = getJson("uid=" + uid, "token=" + token);
json.put("imei", "isFake");
json.put("serial", "W170500652");
json.put("ua", "f_an_4..0");
return json;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getUid() {
return uid;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getUname() {
return uname;
}
@Override
public boolean isRight(JSONObject jsonObject) {
int code = TEST_ERROR_CODE;
try {
code = jsonObject.getJSONObject("meta").getInt("ecode");
JSONObject data = jsonObject.getJSONObject("data");
return code == 0 && !data.isEmpty();
} catch (Exception e) {
return false;
}
}
/**
* 測試結束,資源釋放
*/
public static void allOver() {
FanLibrary.testOver();
}
}
技術類文章精選
- java一行代碼打印心形
- Linux性能監控軟件netdata中文漢化版
- 接口測試代碼覆蓋率(jacoco)方案分享
- 性能測試框架
- 如何在Linux命令行界面愉快進行性能測試
- 圖解HTTP腦圖
- 將swagger文檔自動變成測試代碼
- 五行代碼構建靜態博客
- 基於java的直線型接口測試框架初探
非技術文章精選
- 爲什麼選擇軟件測試作爲職業道路?
- 寫給所有人的編程思維
- 自動化測試的問題所在
- 成爲優秀自動化測試工程師的7個步驟
- 手動測試存在的重要原因
- 成爲自動化測試的7種技能
- 功能測試與非功能測試
- 自動化和手動測試,保持平衡!
- 自動化測試生命週期