捕获 Jasmine Protractor 规范测试中的所有失败
Catching all failures in Jasmine Protractor spec tests
我希望能够捕获我的规范中的所有故障并将其记录到我的 Test Rail 集成中。我目前有这种模式,我将所有测试包装在 try/catch
中,在 CATCH 上,我将测试标记为 FAILURE 并将其添加到结果数组中。在 afterAll
内部,它将所有这些结果发送到 Test Rail 的 API.
这一切基本上都是正确的。但是,偶尔我的一个测试会失败,但不会触发代码的 catch
部分。我的规范文件将一直进行到 done()
并完成完整测试,然后一旦代码到达 AfterAll
部分就会显示我的失败。
我认为这是因为 expect(lookForSomeObject)
仍在后台 processing/looking,并且直到规范文件到达 AfterAll
部分才最终完成它的工作。
我怎样才能更新这个模式更好。
afterAll(async () => {
var r = await tr.addResultsForCases(testCases);
});
it('Verifies Search', async (done) => {
var testCaseInfo: AddResultForCase = {
case_id: 75
}
try {
const locatorSearchBarInput = await loc.locatorSearchBarInput();
await waitToBeDisplayed(locatorSearchBarInput);
await locatorSearchBarInput.sendKeys('35011');
const locatorSearchButton = await loc.locatorSearchButton();
await waitToBeDisplayed(locatorSearchButton);
await click(locatorSearchButton);
await expect(await loc.locatorSearchBarText()).toBeDisplayed();
testCaseInfo.status_id = TestRailStatus.Passed;
testCases.results.push(testCaseInfo);
done();
} catch (e) {
testCaseInfo.status_id = TestRailStatus.Failed;
testCases.results.push(testCaseInfo);
done.fail(e);
}
});
- 我会摆脱
try/catch
- 在环境中将
case_id
添加到您的 it
描述中 Verifies Search @75
- 按照此处所述创建您自己的自定义茉莉花记者 https://jasmine.github.io/tutorials/custom_reporter
- 在你的 onPrepare() 中注册它
specDone
函数将采用 spec
参数(或 result
,无论您如何称呼它)。然后添加这个片段
specDone: function(spec) {
if (spec.status === 'passed') {
// do anything on success
} else if (spec.status === 'failed') {
let case_id = spec.description.match(/@([^@]*$)/)[1];
// report your case_id as failed
} else {
// block for skipped test cases (marked by `xit` or `xdescribe`)
}
}
就是这样。无需再将您的处理添加到每个测试用例。
我希望能够捕获我的规范中的所有故障并将其记录到我的 Test Rail 集成中。我目前有这种模式,我将所有测试包装在 try/catch
中,在 CATCH 上,我将测试标记为 FAILURE 并将其添加到结果数组中。在 afterAll
内部,它将所有这些结果发送到 Test Rail 的 API.
这一切基本上都是正确的。但是,偶尔我的一个测试会失败,但不会触发代码的 catch
部分。我的规范文件将一直进行到 done()
并完成完整测试,然后一旦代码到达 AfterAll
部分就会显示我的失败。
我认为这是因为 expect(lookForSomeObject)
仍在后台 processing/looking,并且直到规范文件到达 AfterAll
部分才最终完成它的工作。
我怎样才能更新这个模式更好。
afterAll(async () => {
var r = await tr.addResultsForCases(testCases);
});
it('Verifies Search', async (done) => {
var testCaseInfo: AddResultForCase = {
case_id: 75
}
try {
const locatorSearchBarInput = await loc.locatorSearchBarInput();
await waitToBeDisplayed(locatorSearchBarInput);
await locatorSearchBarInput.sendKeys('35011');
const locatorSearchButton = await loc.locatorSearchButton();
await waitToBeDisplayed(locatorSearchButton);
await click(locatorSearchButton);
await expect(await loc.locatorSearchBarText()).toBeDisplayed();
testCaseInfo.status_id = TestRailStatus.Passed;
testCases.results.push(testCaseInfo);
done();
} catch (e) {
testCaseInfo.status_id = TestRailStatus.Failed;
testCases.results.push(testCaseInfo);
done.fail(e);
}
});
- 我会摆脱
try/catch
- 在环境中将
case_id
添加到您的it
描述中Verifies Search @75
- 按照此处所述创建您自己的自定义茉莉花记者 https://jasmine.github.io/tutorials/custom_reporter
- 在你的 onPrepare() 中注册它
specDone
函数将采用spec
参数(或result
,无论您如何称呼它)。然后添加这个片段
specDone: function(spec) {
if (spec.status === 'passed') {
// do anything on success
} else if (spec.status === 'failed') {
let case_id = spec.description.match(/@([^@]*$)/)[1];
// report your case_id as failed
} else {
// block for skipped test cases (marked by `xit` or `xdescribe`)
}
}
就是这样。无需再将您的处理添加到每个测试用例。