假设我有这个API测试,并且生产和开发环境之间的URL和凭据不同:
before("Get auth token", async () => {
await spec().post(`${baseUrl}/auth`)
.withBody(
{
email: "testing+standard@test.com",
password: "test"
}
)
.expectStatus(200)
.expect((ctx) => {
expect(ctx.res.body.token).to.be.a("string")
state.token = ctx.res.body.token
})
}
);
现在使用Cypress测试,你可以有一个像这样的json配置文件,每个环境一个:
{
"env": {
"baseUrl": "example",
"standardUserEmail": "testing+standard@test.com",
"standardUserPassword": "test"
}
}
然后像这样访问它:
cy.request({
method: "POST",
url: `${Cypress.env("baseUrl")}/auth`,
})
如果不使用Cypress,如何实现这样的功能?. env文件并不能完全解决这个问题,我也不需要它,因为我希望将值存储在repo中。
- 答案(TypeScript版本)**:
interface Environment {
baseUrl: string;
standardUserEmail: string;
standardUserPassword: string
}
type Environments = {
development: Environment
production: Environment
}
// Define environments with the relevant data as a map
const environments: Environments = {
development: {
baseUrl: 'https://example.com',
standardUserEmail: 'testing+standard@example.com',
standardUserPassword: 'example',
},
production: {
baseUrl: '',
standardUserEmail: '',
standardUserPassword: '',
},
}
// Get the environment name from the command line
// or default to development
const getEnvironmentData = (): Environment => {
const environment = process.env.ENVIRONMENT || 'development';
console.log(`Using environment: ${environment}`);
// Get the environment data from the map
return environments[environment as keyof Environments]
};
// Export the environment data
export = getEnvironmentData()
然后像这样使用:
import 'mocha';
import { spec, request } from "pactum";
import { expect } from "chai"
import config from "../../config"
describe('Example Test API', function () {
const state = {
token: "",
};
before("Get auth token", async () => {
request.setBaseUrl(config.baseUrl)
await spec().post('/auth')
.withBody(
{
email: config.standardUserEmail,
password: config.standardUserPassword
}
)
.expectStatus(200)
.expect((ctx) => {
expect(ctx.res.body.token).to.be.a("string")
state.token = ctx.res.body.token
})
}
);
2条答案
按热度按时间envsm3lx1#
在你的第一个例子中,看起来你正在使用PactumJS。如果你想支持多个环境,并且能够轻松地在它们之间进行选择,你可以使用环境变量和环境Map的组合,类似于Cypress中定义的方式。
使用所有相关数据定义了Map之后,就可以轻松地在测试中引用它们。
最后,您可以通过使用环境变量轻松地在环境数据之间切换。
您将使用
process.env.ENVIRONMENT
访问变量,该变量将Map回您在测试命令之前指定的变量。请参见下图:对于一个工作示例:请看我在GitHub上创建的示例项目:https://github.com/dimitriharding/pactumjs-with-dynamic-environtments
wj8zmpe12#
我认为您的需求可以通过使用dotenv来实现。