如何在Protractor中指定测试执行顺序?让登录测试优先运行
解决测试执行顺序与Driver冲突问题
看起来你遇到了两个关联的问题:一是Audience测试被优先执行,二是它的afterEach操作导致所有测试报错。咱们一步步来搞定:
1. 强制Login测试优先执行
测试框架通常会按文件名或配置的spec顺序来执行测试,你可以通过两种方式明确指定执行顺序:
方式一:修改测试配置文件(以Protractor为例)
从代码风格看你大概率在用Protractor,直接在protractor.conf.js里调整specs数组的顺序,把Login测试的路径放在最前面:
exports.config = { // 其他配置项... specs: [ './login/**/*.e2e-spec.ts', // 优先执行Login文件夹下的所有测试 './audience/**/*.e2e-spec.ts' // 待Login测试完成后,再执行Audience测试 ] };
方式二:文件名前缀排序法
如果不想改动配置文件,也可以给测试文件加数字前缀,比如把login.e2e-spec.ts改成01-login.e2e-spec.ts,audience.e2e-spec.ts改成02-audience.e2e-spec.ts。测试框架会按文件名的字典序自动优先执行带01前缀的文件。
2. 修复Driver关闭导致的测试报错
你的Audience测试里用了afterEach(() => Driver.close()),这会导致每个测试用例执行完就关闭Driver——而Login测试需要正常的Driver实例才能运行,所以被提前关闭后就会触发报错。
修改方案很简单:把afterEach换成afterAll,只在整个Audience测试套件全部执行完成后再关闭Driver:
describe('Category Rule functionality', () => { let loginPage: LoginPage; let audiencePage: AudiencePage; beforeEach(() => { loginPage = new LoginPage(); audiencePage = new AudiencePage(); }); // 替换afterEach为afterAll,仅在所有Audience测试用例完成后关闭Driver afterAll(() => { Driver.close(); console.log('Audience tests finished, Driver closed'); }); it('Auto QA bot should be able to make new Category rule and save.', () => { loginPage.navigateTo(); loginPage.fillCredentials(); audiencePage.goToAudienceTab(); audiencePage.clickAddNewBtn(); audiencePage.typeTextInAudienceNameField(); audiencePage.pickRangeLast14Days(); audiencePage.selectCategoryRule(); audiencePage.typeTextInCategoryRuleTextArea(); audiencePage.clickSaveBtn(); expect(audiencePage.getNotification()).toEqual('Audience saved'); }); });
如果你的Login测试也需要管理Driver生命周期,建议在全局测试配置里统一处理(比如Protractor的onPrepare和onComplete钩子),避免每个测试套件重复编写Driver操作逻辑。
内容的提问来源于stack exchange,提问作者James Delaney
相关产品推荐
相关产品推荐

