在进行接口自动化测试时,因为用户密码的加密方式不清楚是用的哪种方式(对称还是非对称?AES还是DES?),加上开发这块的开发人员跑路了,系统又要测试接口这块的问题,请求接口又要access_token鉴权。如果15分钟内不操作页面元素,登录密码失效,access_token超时。
就用selenium模拟登录,从session里获取access_token作为接口的请求头参数。实现代码如下:
1. 用户信息
package com.test666.tester;
public class UserLoginInfo {
private String username;
private String password;
private String url;
public UserLoginInfo(String username, String password, String url) {
this.username = username;
this.password = password;
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return "LoginInfo{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", url='" + url + '\'' +
'}';
}
}
2. 实现
package com.test666.tester;
import io.restassured.response.Response;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.given;
public class UserLogin {
Map<String,Object> map = new HashMap<>();
public Map<String,Object> getUserResponseValue(UserLoginInfo userLoginInfo) throws InterruptedException {
System.setProperty("webdriver.chrome.driver","src/test/resources/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.get(userLoginInfo.getUrl());
Thread.sleep(1000);
driver.findElement(By.xpath("//input[@placeholder='请输入账号']")).sendKeys(userLoginInfo.getUsername());
driver.findElement(By.xpath("//input[@placeholder='请输入密码']")).sendKeys(userLoginInfo.getPassword());
driver.findElement(By.xpath("//button[@type='button']")).click();
Thread.sleep(3000);
map.put("access_token",driver.getSessionStorage().getItem("access_token"));
map.put("Authorization",driver.getSessionStorage().getItem("access_token"));
map.put("Content-Type","application/json");
return map;
}
@Test
public void apiTest() throws InterruptedException {
String username = 'username';
String password = 'password';
String loginUrl = 'http://192.168.204.200/user/login';
UserLoginInfo user = new UserLoginInfo(username,password,loginUrl);
map = getUserResponseValue(user);
Response res = given().
headers(map).
param("pageNum",1).
param("pageSize",10).
when().
get("http://192.168.204.200/issue/list?type=1").
then().log().all().extract().response();
res.jsonPath().get("data.rows.id[0]");
}
}