Protractor 为什么cucumber量角器不完全忽略没有要运行的标记的功能文件?
我正在使用cucumber量角器框架来运行功能文件 在我的config.js中,我有:Protractor 为什么cucumber量角器不完全忽略没有要运行的标记的功能文件?,protractor,cucumberjs,Protractor,Cucumberjs,我正在使用cucumber量角器框架来运行功能文件 在我的config.js中,我有: specs: [ "../../features/XXX1.feature", "../../features/XXX2.feature", ... "../../features/XXXn.feature", ], cucumberOpts: { tags: "@mytag", }, 在我的功能文件XXX1
specs: [
"../../features/XXX1.feature",
"../../features/XXX2.feature",
...
"../../features/XXXn.feature",
],
cucumberOpts: {
tags: "@mytag",
},
在我的功能文件XXX1.feature中,我设置了这个标记“@mytag”:
@mytag
Scenario Outline: my Flow
Given I am running test case one
....
但不在任何其他功能文件中,如XXX2.feature、XXX3.feature等
我希望量角器只运行XXX1.feature,而不运行XXX2.feature。在某种程度上,当谈到XXX2.feature时,它启动浏览器,不做任何事情,然后输出以下内容:
[14:35:53] I/testLogger - [chrome #01-2] PID: 14272
[chrome #01-2] Specs: D:\ptfbc\ui\features\XXX2.feature
[chrome #01-2]
[chrome #01-2] [14:35:44] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub
[chrome #01-2]
[chrome #01-2]
[chrome #01-2] 0 scenarios
[chrome #01-2] 0 steps
[chrome #01-2] 0m00.000s
但这还不够好。因为XXX2.feature中没有标记“@mytag”。它不应该跳过功能文件XXX2.feature而根本不启动浏览器吗
为每个没有“@mytag”的不合格要素文件启动浏览器也很耗时
有没有一种配置方法可以避免这种情况
编辑
功能和hook.ts
capabilities: {
browserName: "chrome",
shardTestFiles: true,
maxInstances: 1,
'chromeOptions': {
'args': [
'disable-infobars'//,'headless=true','disable-gpu=true',
],
'prefs': {
'credentials_enable_service': false,
'download': {
'prompt_for_download': false,
'directory_upgrade': true,
}
}
}
},
const { BeforeAll, After, Status } = require("cucumber");
import * as fs from "fs";
import { browser } from "protractor";
import { config } from "../config/config";
BeforeAll({timeout: 300 * 1000}, async () => {
await browser.get(config.baseUrl);
});
After(async function(scenario) {
// screenShot is a base-64 encoded PNG
const screenShot = await browser.takeScreenshot();
this.attach(screenShot, "image/png");
});
你犯了一个小错误,把它改成以前而不是以前 并确保您有一个给定的小黄瓜,以便每个场景都能导航到主页或url
Given I am navigating to homepage
这将有您的
浏览器。导航(url)
对于量角器执行要素文件的过程,它可以分为两个阶段
量角器打开每个要素文件的浏览器实例(创建会话)作为第一阶段,然后量角器将运行任务移交给cucumber作为第二阶段
在第二阶段,cucumber将检测特征文件是否满足标记。如果没有,cucumber将不会为功能文件运行任何方案,并且您将在控制台中获得0个方案,0个步骤
否则,cucumber将执行那些满足特征文件中标记的场景
因为量角器在打开浏览器之前不负责检测特征文件是否满足标记,因此正如您所看到的浏览器在不进行任何操作的情况下打开和关闭
唯一的解决方案是在dragrator conf.js中提供满足标签要求的精确的规范
。为了做到这一点,您需要根据标签过滤特征文件,然后将过滤结果分配给规格
我做了一个规格过滤器
我有完全相同的问题,问题解决后,删除
shardTestFiles:true
启动浏览器的代码放在哪里了?如果之前的钩子中有代码,这可能就是原因。你能将钩子代码发布到你使用的shardTestFiles:true
和maxInstances:
,请在量角器配置中发布功能
和多功能
(如果你设置了)。js@yong是的,我确实使用了shardTestFiles和maxInstances,maxInstances正在1@KyleFairns嗨,凯尔,请看我的更新。beforeAll只是做一个browser.get()。但我的问题是,如果功能文件没有要运行的标记,那么应该完全跳过它,甚至在之前都不运行。您可以尝试并向我们提供反馈吗?这意味着您自己编写了“/spec.filter.js”,对吗?如果有一个内置的方式从量角器来做这件事,这将是伟大的。但是非常感谢你的解释。是的,我是为了我的项目需要而做的。据我所知,量角器不提供这样的钩子来实现这一点,在conf.js加载到运行时后,将调用exists钩子,如beforeloanch
和onPrepare
。但是在将conf.js加载到运行时之前,我们需要一个钩子来更改规范。(因为量角器没有公开任何API来在运行时修改config
对象。)
// general config.js
exports.config = {
specs:[
'./features/**/*.feature'
],
cucubmerOpts: {
tags: '@abc'
}
};
// conf.js use my filter
var config = {
specs:[
'./features/**/*.feature'
],
cucubmerOpts: {
tags: '@abc'
}
};
exports.config = require('./spec.filter.js').filter_by_tag(config);