WireMock 服务
此服务可帮助您在使用WebdriverIO运行测试时无缝运行WireMock。它使用众所周知的Maven 存储库为您下载 WireMock jar,然后自动安装、启动和停止。加入Gitter社区以获取帮助和支持,并随时了解最新信息。
安装
npm i -D wdio-wiremock-service
有关如何安装WebdriverIO
的说明,请参见此处。
用法
在根目录(默认 ./mock
)中,您会找到两个子目录,__files
和 mappings
,它们用于您的夹具和模拟。
有关更多信息,请查看WireMock 的官方文档。
配置
为了使用 wdio 测试运行器中的服务,您需要将其添加到服务数组中
// wdio.conf.js
export.config = {
// ...
services: ['wiremock'],
// ...
};
当使用 webdriverio 独立版本时,您需要手动添加服务并触发onPrepare
和 onComplete
钩子。示例可以在此处找到(此示例使用了Jest)
选项
以下选项可以添加到服务中。
端口
WireMock 应在其上运行的端口。
类型:数字
默认值:8080
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { port: 8181 }]],
// ...
};
rootDir
WireMock 将在其中查找文件的路径。
类型:字符串
默认值:./mock
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { rootDir: './mock' }]],
// ...
};
版本
要下载和使用的 WireMock 版本。
类型:字符串
默认值:3.3.1
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { version: '2.25.1' }]],
// ...
};
skipWiremockInstall
指示服务跳过下载 WireMock。
类型:布尔值
默认值:false
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { skipWiremockInstall: true }]],
// ...
};
binPath
指向本地 Wiremock 二进制文件的自定义路径(通常与 skipWiremockInstall 结合使用)。
类型:字符串
默认值:'./wiremock-standalone-3.0.0.jar'(相对于服务)
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { binPath: './my-custom/example-path/wiremock-standalone-3.0.0.jar' }]],
// ...
};
silent
WireMock 输出的静默模式(包括服务本身的其他日志记录)。
类型:布尔值
默认值:false
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { silent: true }]],
// ...
};
mavenBaseUrl
Maven 的基本下载 URL。
类型:字符串
默认值:https://repo1.maven.org/maven2
示例
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { mavenBaseUrl: 'https://repo1.maven.org/maven2' }]],
// ...
};
args
您可以在此列表中传递所有支持的参数以配置 WireMock
注意:您不能在此处传递选项(port
、rootDir
、stdio
、mavenBaseUrl
),因为它们将被忽略。
类型:数组
示例
// wdio.conf.js
export const config = {
// ...
services: [
[
'wiremock',
{
args: ['--verbose', '--match-headers'],
},
],
],
// ...
};
编写测试
编写您的第一个测试非常简单
使用 WDIO 测试运行器
import fetch from 'node-fetch'; // you can use any HTTP client you like
import { equal } from 'node:assert'; // you can use any assertion library you like
describe('example', () => {
it(`should assert the mock data`, async () => {
const body = await fetch('https://127.0.0.1:8080/api/mytest');
equal(body.text(), 'Hello world!');
});
});
使用 WebdriverIO 独立版本
import fetch from 'node-fetch'; // you can use any HTTP client you like
import { equal } from 'node:assert'; // you can use any assertion library you like
import { remote } from 'webdriverio';
import { launcher } from 'wdio-wiremock-service';
const WDIO_OPTIONS = {
capabilities: {
browserName: 'chrome',
},
};
describe('example', () => {
let wiremockLauncher;
let client;
beforeAll(async () => {
wiremockLauncher = new launcher(); // create instance of the service
await wiremockLauncher.onPrepare(WDIO_OPTIONS); // run the onPrepare hook
client = await remote(WDIO_OPTIONS);
});
afterAll(async () => {
await client.deleteSession();
await wiremockLauncher.onComplete(); // run the onComplete hook
});
test('should showoff a mocked api response', async () => {
const body = await fetch('https://127.0.0.1:8080/api/mytest');
equal(body.text(), 'Hello world!');
});
});
有关 WebdriverIO 的更多信息,请参见主页。