SpringBoot+TestNG+RESTAssured搭建测试框架(2)

如何通过RestAssured测试登陆页面(跳转sso登陆,sso url携带新生成的login_challenge)

引入RestAssured和TestNG的依赖包,可以在pom.xml文件中添加以下依赖

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.3.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.1</version>
</dependency>

创建一个测试类,并在类上添加@Test注解

public class SSOLoginTest {

    @Test
    public void TestLogin{
    }
}

在测试方法中,使用RestAssured发送GET请求到登陆页面,并获取响应

Response response = RestAssured.given()
                .when()
                .get("http://localhost:8080/login");

解析响应中的HTML页面,获取登陆页面中的表单数据,包括表单的action地址、hidden字段等信息

	String html = response.getBody().asString();
	Document document = Jsoup.parse(html);
	Element form = document.select("form").first();
	String action = form.attr("action");
	Elements inputs = form.select("input");
	Map<String, String> formData = new HashMap<>();
	for (Element input : inputs) {
	    String name = input.attr("name");
	    String value = input.attr("value");
	    if (!name.isEmpty()) {
	        formData.put(name, value);
	    }
	}

根据获取到的表单数据,构造POST请求,将用户名和密码作为参数发送到登陆页面

String username = "testuser";
String password = "testpassword";
formData.put("username", username);
formData.put("password", password);
response = RestAssured.given()
            .contentType("application/x-www-form-urlencoded")
            .formParams(formData)
            .post(action);

解析响应中的HTML页面,获取跳转至SSO登陆页面的URL,该URL中包含了新生成的login_challenge参数

html = response.getBody().asString();
document = Jsoup.parse(html);
String ssoUrl = document.select("a").first().attr("href");

构造GET请求,将新生成的login_challenge参数作为参数发送到SSO登陆页面

response = RestAssured.given()
            .when()
            .get(ssoUrl);

根据响应中的状态码或者页面内容来判断登陆是否成功

Assert.assertEquals(response.getStatusCode(), 200);
Assert.assertTrue(response.getBody().asString().contains("Welcome"));

TODO(上述代码暂未PASS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值