什么是HTTP请求头
HTTP请求头是HTTP 协议的重要组成部分。它们定义了 HTTP 消息(请求或响应)并允许客户端和服务器与消息交换可选的元数据。它们由不区分大小写的头字段名称后跟一个冒号,然后是头字段值组成。标题字段可以扩展到多行,方法是在每一额外行前至少有一个空格或水平制表符。
标题可以根据其上下文进行分组:
- 请求头:HTTP 请求请求头用于提供有关正在获取的资源和发出请求的客户端的附加信息。
- 响应头:HTTP 响应头提供有关响应的信息。
以下是 HTTP 请求请求头中包含的主要信息:
- IP 地址(来源)和端口号。
- 请求的网页的 URL。
- Web 服务器或目标网站(主机)。
- 浏览器将接受的数据类型(文本、html、xml 等)。
- 发送兼容数据的浏览器类型(Mozilla、Chrome、IE)。
- 作为响应,包含请求数据的 HTTP 响应请求头由 发回。
需要更改HTTP请求请求头
以下是测试工作中可能需要更改 HTTP 请求请求头的一些场景:
通过建立适当的 HTTP 请求头来测试控制、测试不同的版本。
需要对 Web 应用程序的不同方面甚至服务器逻辑进行彻底测试的情况。
由于 HTTP 请求请求头用于启用 Web 应用程序逻辑的某些特定部分,通常在正常模式下
会禁用这些部分,因此根据测试场景,可能需要不时修改 HTTP 请求请求头。
在被测 Web 应用程序上测试访客模式是测试人员可能需要修改HTTP请求请求头的情况。但是SeleniumRC曾经支持的修改HTTP请求头的功能,现在Selenium Webdriver不处理了。
Selenium修改请求头
Selenium Java中修改请求头请求的多种方法。大体上,有几种可能,接下来可以修改 Java-Selenium 项目中的头请求。
- 使用Java HTTP请求框架。
- 使用反向代理。
- 使用 Firefox 浏览器扩展。
Java HTTP请求框架
与 Selenium 一起,我们可以使用 REST Assured,它是一种以简单方式使用 REST服务的绝佳工具。为项目配置 REST Assured教程非常简单,这里就不介绍了。
让我们考虑以下场景:
- 我们有一个名为 RequestHeaderChangeDemo 的 Java 类,我们在其中维护基本配置
- 我们有一个名为 TestSteps 的测试步骤文件,我们将在其中调用
RequestHeaderChangeDemo Java 类中的方法,通过这些方法我们将执行我们的测试。
观察下面名为 RequestHeaderChangeDemo 的 Java 类。
BASE_URL是应用了以下四种方法的网站:
- 认证用户
- 获取产品
- 添加产品
- 移除产品
public class RequestHeaderChangeDemo {
private static final String BASE_URL = "https://****";
public static IRestResponse<Token> authenticateUser(AuthorizationRequest authRequest) {
RestAssured.baseURI = BASE_URL;
RequestSpecification request = RestAssured.given();
request.header("Content-Type", "application/json");Response response = request.body(authRequest).post(Route.generateToken());
return new RestResponse(Token.class, response);
}此处省略部分重复代码
在上面的Java类文件中,我们在每个连续的方法中重复发送了BASE_URL和headers。示例如下所示:
RestAssured.baseURI = BASE_URL;
RequestSpecification request = RestAssured.given();
request.header("Content-Type", "application/json");
Response response = request.body(authRequest).post(Route.generateToken());
request.header方法请求 JSON 格式的请求头。有大量的代码重复,这降低了代码的可维护性。如果我们在构造函数中初始化RequestSpecification对象并使这些方法非静态(即创建实例方法),则可以避免这种情况。由于 Java 中的实例方法属于类的