在所有测试运行后,在e2e测试中删除创建的记录

时间:2016-09-08 10:28:36

标签: angularjs protractor e2e-testing

在使用Protractor运行测试后,我一直在寻找合适的方法来“清理”创建的记录。

作为一个例子,我有一个测试套件,目前在创建和更新屏幕上运行测试,但目前没有删除功能,但是我可以点击后端API的删除终点。

所以我采取的方法是记录创建记录的id,以便在afterAll中我可以发出请求以对记录执行删除操作。

例如:

beforeAll(function() {
    loginView.login();
    page.customerNav.click();
    page.customerAddBtn.click();
    page.createCustomer();
});

afterAll(function() {
    helper.buildRequestOptions('DELETE', 'customers/'+createdCustomerId).then(function(options){
        request(options, function(err, response){
            if(response.statusCode === 200) {
                console.log('Successfully deleted customer ID: '+ createdCustomerId);
                loginView.logout();
            } else {
                console.log('A problem occurred when attempting to delete customer ID: '+ createdCustomerId);
                console.log('status code - ' + response.statusCode);
                console.log(err);
            }
        });
    });
});

//it statements below...

虽然这有效,但我不确定这是好的还是坏的方法,如果是后者,还有什么选择。

我这样做是为了防止随着时间的推移添加一大堆虚拟测试记录。我知道你可以在测试运行之间清理数据库,例如通过一个脚本或类似的CI服务器,但它不是我/我们进一步研究的东西。此外,这种方法看起来更简单,但我再次不确定这种方法在测试规范文件中的实用性。

那里的任何人都可以提供进一步的评论\解决方案吗?

由于

2 个答案:

答案 0 :(得分:3)

嗯,对于它的价值,我基本上使用完全相同的方法。我们有一个端点,可以根据ID重置特定用户的数据,我也会在beforeAll()块中点击它,然后在每次运行之前将数据重置为预期状态(我可以在完成所有操作之后完成它) ,但有时人们搞乱测试帐户所以我以前做的所有)所以我只需获取用户ID并发送http请求。

我无法真正说出它的实用性,因为它只是我完成的一项任务,它对我来说非常有效,所以我认为没有必要替代它。只是想让你知道你并不孤单:)

我很好奇其他人是否有其他解决方案。

答案 1 :(得分:1)

更强大的解决方案是使用$httpBackend模拟您的服务器,这样您就不必对API进行实际调用。

然后,您可以根据e2e测试规范配置服务器响应。

这是一个虚假的服务器示例:

angular.module('myModule')
.config(function($provide,$logProvider) {
    $logProvider.debugEnabled(true);
})
.run(function($httpBackend,$log) {
    var request = new RegExp('\/api\/route\\?some_query_param=([^&]*)');
    $httpBackend.whenGET(request).respond(function(method, url, data) {
        $log.debug(url);
        // see http://stackoverflow.com/questions/24542465/angularjs-how-uri-components-are-encoded/29728653#29728653
        function decode_param(param) {
            return decodeURIComponent(param.
                 replace('@', '%40').
                 replace(':', '%3A').
                 replace('$', '%24').
                 replace(',', '%2C').
                 replace(';', '%3B').
                 replace('+', '%20'));
        }
        var params = url.match(request);
        var some_query_param = decodeURIComponent(params[1]);
        return [200,
            {
                someResponse...
            }, {}];
    });
});

然后在测试环境中加载此脚本并完成。