技术分享 | 接口测试中,请求超时该怎么办?

在接口自动化测试中,请求超时是常见问题。本文探讨了当测试用例遇到服务端阻塞时,如何通过设置超时时间来避免测试流程停滞。通过实例展示了Python和Java中设置超时的方法,确保测试用例能够正常执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A 发送请求,然后等待 B 的响应,同时开始超时计时,如果在超时时间内成功接收到响应,则结束等待和计时。如果到了超时时间还没有接收到响应,则结束等待同时此次通讯失败,这个过程叫做请求超时。在接口自动化测试过程中,也常常会碰到请求超时的场景。

如下图所示,测试用例 2 没有设置超时处理,遇到服务端阻塞,测试用例 2 一直处于等待的状态,后面的测试用例都不执行:

> > 霍格沃兹测试学院  TestingStudio

如下图所示,如果测试用例 2 设置了 3s 的超时时间,遇到服务端阻塞,测试用例 2 在 3s 之后则抛出异常,测试用例 3 正常执行:

> > 霍格沃兹测试学院  TestingStudio

实战练习

编写三条测试用例,在 test_two 测试用例中设置超时时间为 3 秒,超过 3s 还没有得到响应的话则抛出异常,然后正常执行后面的测试用例。

Python 版本

Python 可以在调用请求方法时传入 timeout 参数控制超时时间。

import requests
class TestReq:
    def test_one(self):
        r = requests.post("https://httpbin.ceshiren.com/post")
        assert r.status_code == 200
    def test_two(self):
        # 通过timeout 参数设置超时时间,设置超时时间为0.1s,模拟超时场景
        r = requests.post("https://github.com/post", timeout=0.1)
        assert r.status_code == 200
    def test_three(self):
        r = requests.post("https://httpbin.ceshiren.com/post")
        assert r.status_code == 200

> > 霍格沃兹测试学院  TestingStudio

JAVA版本

Java 需要通过添加 RestAssured 的配置信息来处理超时的请求。通过 setParam() 设置超时时间,第一个参数为连接的类型,第二个参数为超时的最大时长,单位是 3000 毫秒。

import io.restassured.RestAssured;
import io.restassured.config.HttpClientConfig;
import io.restassured.config.RestAssuredConfig;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class ReqTimeoutTest
{
    @Test
    void timeout1(){
        given().
        when().get("https://httpbin.ceshiren.com/get").then().statusCode(200).log().all();
    }
    @Test
    void timeout2(){
        RestAssured.config=RestAssuredConfig.config().httpClient(HttpClientConfig.httpClientConfig().
                setParam("http.connection.timeout",3000).
                setParam("http.socket.timeout",3000).
                setParam("http.connection-manager.timeout",3000));

        given().when().get("https://github.com/").then().log().all();

    }
    @Test
    void timeout3(){

        given().when().get("https://httpbin.ceshiren.com/get").then().statusCode(200).log().all();
    }
}

在R语言中,可以使用withTimeout()函数来处理连接超时的情况。这个函数可以设置一个超时时间,并在超时后执行相应的操作。例如,可以设置报错、警告或者没有任何显示。下面是一个示例代码: withTimeout(system(paste("phantomjs ", js_file, sep = '')), timeout = 20, onTimeout = "warning") 在这个示例中,使用了phantomjs来渲染网页,并设置了一个超时时间为20秒。如果在20秒内无法完成渲染,将会发出一个警告。这样可以避免长时间等待导致程序卡住的情况发生。\[2\] #### 引用[.reference_title] - *1* [技术分享 | 接口测试中,请求超时该怎么办?](https://blog.youkuaiyun.com/m0_67695717/article/details/126464772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [R语言处理函数超时、写js文件、函数异常如何跳过的简单版、新建文件夹、检测文件是否存在](https://blog.youkuaiyun.com/yuanzhoulvpi/article/details/104721485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值