如何對修改密碼介面進行壓測
阿新 • • 發佈:2019-08-22
做介面測試中,對於一般性的單業務介面測試很多工具可供選擇,但是對於一些相關業務相關性的關聯介面測試就比較麻煩,使用工具比如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();
}
}