Angular2 - 在不同环境中执行端到端测试
Angular2 - Executing e2e tests in different environments
我是 Protractor
的新手。我开发了几个测试用例来完成端到端测试。这些测试用例在我们拥有的所有 3 种不同环境中都运行良好:dev
、testing
和 production
。
但我需要根据需要进行测试的环境更改测试用例中的 Angular 应用程序 URL(因为 URL 因环境而异)。
我正在使用 Angular CLI 命令 ng e2e
来 运行 测试。现在我的问题是
1) 是否可以传递参数ng e2e
,以便基于参数,可以在测试用例中动态设置URL?
2) 是否需要全局安装 protractor
,因为 Angular CLI 在 node_modules
下创建了带有 protractor
的 angular 应用程序?
在我的项目设置中,Protractor
版本是 5.1.2,Angular CLI
版本是 1.2.0。
下面是Protract
配置
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
useAllAngular2AppRoots: true,
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e'
});
},
onPrepare: function() {
jasmine.getEnv().addReporter(new SpecReporter());
}
};
我尝试了一些方法,比如添加 params:[env:dev]
并在命令行中将参数作为 ng e2e params.env=test
传递,但我总是得到默认值,而不是从命令行传递的值。
我也试过@cnishina的回答,但是process.env
的console.log没有需要的细节。
使用环境变量在环境之间切换
我的建议是尝试使用环境变量并在 Protractor 配置文件中切换环境。你可以 export TEST_ENV=dev
然后有条件 browser.baseUrl
量角器配置文件
var baseUrl = '';
if (process.env.TEST_ENV === 'dev') {
baseUrl = 'http://devurl';
} else if (process.env.TEST_ENV === 'stage') {
baseUrl = 'http://stageurl';
} else {
baseUrl = 'http://produrl';
}
exports.config = {
baseUrl: baseUrl
}
有关使用 process.env
的配置文件的更具体示例,请参阅 Testing Angular Applications, chapter 11 GitHub repo.
您也可以内联更改 baseUrl 参数;但是,如果您根据测试环境更改多个变量,我建议使用环境变量:
ng e2e {protractor config file} --baseUrl='http://devurl'
量角器全局安装?
Protractor 不需要全局安装。建议使用从 node_modules 目录本地安装的版本。这将为其他开发人员提供可重复的步骤,使用相同的 Protractor 依赖项来 运行 e2e 测试。或者,如果您使用的是全局安装的版本,您现在必须指示其他开发人员使用特定的 Protractor 版本。
我相信您可以创建一个 environment.test.ts,其中包含您想要用于测试环境的 baseUrl,然后您可以 运行 从命令行进行测试,如下所示:
ng e2e --environment test
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js"
},
"configurations": {
"production": {
"devServerTarget": "project:serve:production"
},
"mac": {
"devServerTarget": "project:serve:mac"
}
}
}
然后您可以使用 --configuration
标志在环境之间切换:
ng e2e --configuration=production
ng e2e --configuration=mac
我是 Protractor
的新手。我开发了几个测试用例来完成端到端测试。这些测试用例在我们拥有的所有 3 种不同环境中都运行良好:dev
、testing
和 production
。
但我需要根据需要进行测试的环境更改测试用例中的 Angular 应用程序 URL(因为 URL 因环境而异)。
我正在使用 Angular CLI 命令 ng e2e
来 运行 测试。现在我的问题是
1) 是否可以传递参数ng e2e
,以便基于参数,可以在测试用例中动态设置URL?
2) 是否需要全局安装 protractor
,因为 Angular CLI 在 node_modules
下创建了带有 protractor
的 angular 应用程序?
在我的项目设置中,Protractor
版本是 5.1.2,Angular CLI
版本是 1.2.0。
下面是Protract
配置
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
useAllAngular2AppRoots: true,
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e'
});
},
onPrepare: function() {
jasmine.getEnv().addReporter(new SpecReporter());
}
};
我尝试了一些方法,比如添加 params:[env:dev]
并在命令行中将参数作为 ng e2e params.env=test
传递,但我总是得到默认值,而不是从命令行传递的值。
我也试过@cnishina的回答,但是process.env
的console.log没有需要的细节。
使用环境变量在环境之间切换
我的建议是尝试使用环境变量并在 Protractor 配置文件中切换环境。你可以 export TEST_ENV=dev
然后有条件 browser.baseUrl
量角器配置文件
var baseUrl = '';
if (process.env.TEST_ENV === 'dev') {
baseUrl = 'http://devurl';
} else if (process.env.TEST_ENV === 'stage') {
baseUrl = 'http://stageurl';
} else {
baseUrl = 'http://produrl';
}
exports.config = {
baseUrl: baseUrl
}
有关使用 process.env
的配置文件的更具体示例,请参阅 Testing Angular Applications, chapter 11 GitHub repo.
您也可以内联更改 baseUrl 参数;但是,如果您根据测试环境更改多个变量,我建议使用环境变量:
ng e2e {protractor config file} --baseUrl='http://devurl'
量角器全局安装?
Protractor 不需要全局安装。建议使用从 node_modules 目录本地安装的版本。这将为其他开发人员提供可重复的步骤,使用相同的 Protractor 依赖项来 运行 e2e 测试。或者,如果您使用的是全局安装的版本,您现在必须指示其他开发人员使用特定的 Protractor 版本。
我相信您可以创建一个 environment.test.ts,其中包含您想要用于测试环境的 baseUrl,然后您可以 运行 从命令行进行测试,如下所示:
ng e2e --environment test
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js"
},
"configurations": {
"production": {
"devServerTarget": "project:serve:production"
},
"mac": {
"devServerTarget": "project:serve:mac"
}
}
}
然后您可以使用 --configuration
标志在环境之间切换:
ng e2e --configuration=production
ng e2e --configuration=mac