我有一个赛普拉斯框架,我正在其中测试用户页面(他们可以在其中与页面交互,下载文件,更新他们的个人资料等),以及该用户页面的管理页面(单独登录,实际上可以作为管理员,修改用户页面中的内容)。因此,我有三个配置文件:
cypress.config-admin.ts,其中我有管理页面的 baseUrl(如www.mypage.admin.com)。我在文件中传递 --config-file 标记package.json以进行无头测试。cypress.config-user.ts我有用户页面的 baseUrl ( www.mypage.com)。我在文件中传递 --config-file 标记package.json以进行无头测试。cypress-config.ts,我用它通过赛普拉斯仪表板手动运行测试。有时我需要在同一个测试用例中使用两个 URL(以管理员身份执行某些操作,以用户身份进行验证)。
我的问题是,当我使用 时Cypress.config().baseUrl,它只会显示 上的值cypress.config.ts。我已经尝试了多种方法,但还没有找到在admin或user配置文件上调用 baseUrl 的方法。
https://docs.cypress.io/api/cypress-api/config似乎建议我可以传递配置文件的名称,但我无法做到这一点=/
有任何想法吗?
所以我一直在本地主机上设置我的测试,但现在我想将它们设置为在几个不同的环境上运行,但在所有这些环境上我都有一个单独的baseUrl和apiUrl。dev 有:http://base.url.com和 api:http://base.url.com/api
prod 有:https://prod.url.com和 api:https://prod-api.url.com/v1
我已经阅读了这里的文档和一些帖子(尽管其中很多来自 cypress v10 之前),但我无法决定什么是最好的方法。我倾向于创建不同的配置文件(cypress-dev.config.ts、cypress-prod.config.ts 等),每个文件针对不同的环境,如下所示:
e2e: {
baseUrl: 'http://base.url.com',
env: {
apiURl: '..'
}}
Run Code Online (Sandbox Code Playgroud)
创建新的 npm 脚本,我将 cypress 设置为在特定环境中运行时使用正确的配置文件。
我考虑过使用一个配置文件,但我无法弄清楚到底如何做。
e2e: { env: {
development: {
baseUrl:'baseURlDev',
apiURl: 'apiUrlDev'
},
production: {
baseUrl:'baseURlProd',
apiURl: 'apiUrlProd'
},
staging: {
baseUrl:'baseURlStag'
apiURl: 'apiUrlStag' }
}}
Run Code Online (Sandbox Code Playgroud)
如何使用它是我的赛普拉斯代码。Cypress.env('环境类型.baseUrl')?? 我对此不太清楚。
或者也许还有我还没有考虑过的第三种巧妙的方法?
我希望能够通过修改 的值在任何 URL 上运行我的 Cypress 脚本,baseUrl但该命令不会更改它。
"cypress open --env version=development --config baseUrl=https://google.com"
Run Code Online (Sandbox Code Playgroud)
我也尝试过 env 变量,但这也不起作用:
"cypress:open:dev": "cypress open --env version=development,baseUrl=https://google.com"
Run Code Online (Sandbox Code Playgroud)
配置文件:
export default defineConfig({
e2e: {
async setupNodeEvents(on, config) {
const version = config.env.version || 'development'
const configFile = await import(path.join(
config.projectRoot,
'cypress/config',
`${version}.json`
));
const credentialsFile = await import(path.join(
config.projectRoot,
'cypress/config',
'credentials.json'
));
config = {
...config, // take config defined in this file
...configFile // merge/override from the external file
}
config.env = {
...config.env, // …Run Code Online (Sandbox Code Playgroud) 我有一个cypress.config.ts类似这样的文件:
import {defineConfig} from "cypress";
export default defineConfig(
{
e2e: {
baseUrl: 'http://localhost:3000',
}
}
...
...
Run Code Online (Sandbox Code Playgroud)
问题 1:我正在构建的应用程序必须使用不同的端口来实现不同的功能。例子:
问题 2: Cypress 自动将尾部斜杠添加到baseUrl,因此我以后无法自己添加端口(在单独的测试中),而不需要进行一些字符串操作体操。
那么我该如何设置,以便在测试开始时可以定义应使用哪个端口?比如这样:
// This doesn't work:
it('Test feature 1', () => {
Cypress.env('PORT', 3000);
cy.request('GET', 'feature-1').as('featureOne')
...
...
});
it('Test feature 2', () => {
Cypress.env('PORT', 3002);
cy.request('GET', 'feature-2').as('featureTwo')
...
...
});
Run Code Online (Sandbox Code Playgroud)
baseUrl为空字符串如果让我cypress.config.ts这样:
import {defineConfig} from "cypress";
export default defineConfig(
{ …Run Code Online (Sandbox Code Playgroud)