使用Playwright进行API GET请求测试

5

我一直在尝试使用以下代码验证GET状态。不幸的是,我遇到了一个错误“apiRequestContext.get:connect ECONNREFUSED ::1:8080”。非常感谢您提供任何帮助。

代码:

import { expect, test } from '@playwright/test';

test('Get health status', async ({ request }) => {
    const response = await request.get('http://localhost:8080/myapp/actuator/health')
    expect(response.status()).toBe(200)
  })

错误: apiRequestContext.get: 连接被拒绝 ::1:8080


您能否使用其他测试工具(如Postman)成功访问此端点并获得200的响应? - Vishal Aggarwal
你能试一下 await request.get('http://localhost:8080/myapp/actuator/health', verify=False) 吗? - Jaky Ruby
你找到解决方案了吗? - johannesMatevosyan
1
@johannesMatevosyan 请看下面的答案。 - Synox
1个回答

0

自从NodeJS 17版本以后,node会优先选择IPv6而不是IPv4

验证

可能服务只监听IPv4,但客户端使用IPv6。请检查以下内容中是否包含IPv4IPv6

  • netstat -tulpen(在Linux上)或
  • sudo lsof -iTCP -sTCP:LISTEN -n -P 8080 | grep -i --color 8080(在macOS上)。

解决方案

有两个选项:

  1. 为服务启用IPv6绑定。这取决于您的服务框架-在Google中搜索如何为服务XYZ启用IPv6

  2. 配置NodeJS优先选择IPv4而不是IPV6。添加到playwright.config.js

import dns from "dns";
dns.setDefaultResultOrder("ipv4first");

如果服务能够处理,强制使用IPv4: 连接到http://127.0.0.1:8080而不是http://localhost:8080。 禁用整个机器的本地IPv6地址。编辑hosts文件(sudo vi /etc/hosts)并删除::1 localhost
资源:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接