【发布时间】:2018-10-10 11:52:17
【问题描述】:
想知道是否有可能使用量角器 + jasmine 进行数据驱动测试以并行执行。
我有以下几点: storeList.json - 一个带有输入参数的数组,用于测试单个商店。我们有大约 40 家商店 - 记录。
[
{
"storeId": "Store_ID_1",
"storeController": "Store_Controller_1"
},
{
"storeId": "Store_ID_2",
"storeController": "Store_Controller_2"
}
]
ordering.js - 代码(量角器),它从上面的 json 中获取每个元素并将其作为单独的测试执行。
describe('Ordering', function () {
all(require('../../assets/data/storeList'), (storeData) => {
it(`Add all items with all modifiers to cart and checkout on ${storeData.storeId}`, async function () {
let user = await userGenerator.Registered(storeData);
await shoppingCartActions.fillCart(storeData,user);
await homePageActions.openCart();
await shoppingCartActions.validateCartMath();
await shoppingCartActions.proceedToCheckout();
await recommendedActions.continueToDeliveryOptions();
await deliveryAndTipsActions.pickupAnd15PercentTip();
await deliveryAndTipsActions.validateCartMath();
await deliveryAndTipsActions.continueToAddressConfirmation();
await pickupAddressConfirmationActions.continueToPaymentMethod();
await paymentActions.fillCardData(storeData);
await paymentActions.pay();
});
});});
all.js - 一个 sn-p 使 ordering.js 有点数据驱动
module.exports = (data, test) => {
const rows = Array.isArray(data) ? data : [data];
rows.forEach((row, index) => {
test(row, index + 1)
})};
config.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl : 'localhost',
restartBrowserBetweenTests: true,
maxSessions: 3,
multiCapabilities: [{
'browserName': 'chrome'
}, {
'browserName': 'chrome'
}, {
'browserName': 'chrome'
}],
specs: ['./testsuite/ordering/*.js'],
allScriptsTimeout: 20000,
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 600000,
isVerbose: true,
},
onPrepare: () => {
global.all = require('./all');
}};
使用此设置,我得到 3 个 chrome 实例,每个执行 ordering.js 测试都运行来自 storeList 的所有可用数据输入。所以我执行了 6 个测试,但实际上我愿意并行执行 2 个测试。
我尝试过的另一个选项是有多个 json 用于数据输入,以及排序 js 的副本,但这似乎是一种不好的做法。
谁能指出我正确的方向,让量角器数据驱动测试并行执行。
【问题讨论】:
-
我从这篇文章开始了我的研究 :) 如果你有很多规范,并行执行测试并不是什么大问题,但是当你有一个包含多个规范的规范时会很痛苦输入参数....
-
然后,在范围内设置参数,例如第一个实例采用前 0-10 个输入参数,第二个采用下一个输入参数范围 (10-20) 等等?
-
这将迫使我拥有很少的 json 文件和一些 ordering.js 副本。我试图避免这种情况。理想的情况是在这里有某种数据提供者,以使测试数据驱动,但似乎 npm 中没有什么可以满足我的需求:(
-
理想情况下,每个 tets 都依赖于自己的数据,并且每个测试彼此独立,例如应用密封模式。在你的情况下,我认为你必须分开/打破测试。您必须只维护输入数据,而不是测试代码。
标签: javascript testing protractor automated-tests qa