gpt4 book ai didi

java - Jersey 客户端策略在登录后测试主页

转载 作者:行者123 更新时间:2023-11-30 08:02:30 25 4
gpt4 key购买 nike

我正在使用 Jersey 创建一个 Web 应用程序。目前有两个页面:登录页面和主页。当用户输入正确的用户名和密码时,登录页面将重定向到主页(否则会在弹出窗口中显示警告,并且不会重定向)。

在主页中,从服务器检索某些内容并在页面上更新。

由于主页上没有用户名和密码,如何编写客户端代码来验证用户登录成功后是否将正确的内容渲染到主页上?

最佳答案

一种方法是使用 HTML 解析库,例如 jsoup 。这是一个完整的示例,使用 Jersey Test Framework 。您可以像任何其他单元测试一样运行它

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import org.junit.Test;
import static junit.framework.Assert.*;

public class HtmlParserTest extends JerseyTest {

@Path("login")
public static class LoginController {

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
public String doLogin(MultivaluedMap<String, String> formParams) {
boolean valid = false;
valid = "user".equals(formParams.getFirst("username"));
valid = "pass".equals(formParams.getFirst("password"));

String message = valid ? "You Win!" : "You Lose!";
String html
= "<html>\n"
+ " <body>\n"
+ " <h1 id=\"message\">" + message + "</h1>\n"
+ " </bod;y>\n"
+ "</html>";
return html;
}
}

@Override
public Application configure() {
return new ResourceConfig(LoginController.class);
}

@Test
public void youWinMessageWithValidCredentials() {
String message = handleRequest("pass");
assertEquals("You Win!", message);
}

@Test
public void youLoseMessageWithBadCredentials() {
String message = handleRequest("wrong");
assertEquals("You Lose!", message);
}

private String handleRequest(String password) {
Form form = new Form();
form.param("username", "user");
form.param("password", password);
String html = target("login").request()
.accept(MediaType.TEXT_HTML)
.post(Entity.form(form), String.class);
return getMessageContent(html);
}

/* jsoup code */
private String getMessageContent(String html) {
Document document = Jsoup.parse(html);
Element messageElem = document.getElementById("message");
return messageElem.text();
}
}

这是测试的依赖项

<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<scope>${jersey2.version}</scope>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>

关于java - Jersey 客户端策略在登录后测试主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com