Closed kimalec closed 9 years ago
pokers added a comment - 22/Mar/15 5:05 PM
pokers added a comment - 28/Mar/15 4:18 PM
e2e.conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
specs: ['/Users/pokers/WebstormProjects/BlogSyncer/test/e2e/test_protractor.js'],
baseUrl: 'http://www.justwapps.com',
jasmineNodeOpts: {
showColors: true
}
};
test_protractor.js
/**
* Created by pokers on 15. 3. 22..
*/
/*
* This is just example. You can refer to this.
*
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
var name = element(by.binding('username'));
username.clear();
expect(name.getText()).toEqual('');
username.sendKeys('Jane Doe');
expect(name.getText()).toEqual('Jane Doe');
});
});
describe('angularjs homepage', function() {
it('should greet the named user', function() {
browser.get('http://www.angularjs.org');
element(by.model('yourName')).sendKeys('Julie');
var greeting = element(by.binding('yourName'));
expect(greeting.getText()).toEqual('Hello Julie!');
});
});
*/
// spec.js
describe('Protractor Demo App', function() {
it('should have', function() {
browser.get('http://www.justwapps.com/');
expect(browser.getTitle()).toEqual('Super Calculator');
});
});
Protractor를 이용한 e2e test 개발을 위해서는 기본적으로 JS, Angular js, Node js에 대해서 지식이 있어야 한다. Protractor은 Jasmine test framework을 사용하고, 기본적인 syntax는 http://angular.github.io/protractor/#/ 에서 익힐 수 있다. 따라서, angurla js, jasmine, 기초 사용 법 및 상위 활용법 등의 사전 study가 필요하다. 단점은 webdriver를 이용하여 실제 browser를 이용한 테스트 이기 때문에 추후 복잡도가 높아질 경우 테스트 자체에 시간이 오래 걸릴 수 있다. 따라서, 좀비 js를 이용한 e2e test 등 실제 browser를 사용하지 않는 다른 방법도 조사해봐야 함.
아래는 blogsync page 에서 사용한 기초 예제이다. 이 밖에도 다양한 기능을 사용할 수 있다(study 필요)
describe('Test the blogsyncer', function() {
it('should check title', function() {
browser.get('http://www.justwapps.com/');
expect(browser.getTitle()).toEqual('Invisible automation service BlogSyncer');
});
});
describe('click test', function(){
it('check login button', function(){
browser.get('http://www.justwapps.com/');
element(by.binding('signstat')).click();
expect(element(by.binding('Please sign in')));
element(by.repeater('provider in providers').row(5)).click();
});
});
해결 해야할 문제점
How to use protractor on non- angular JS app. webdriver를 이용하면 간단하게 element를 가져오고 컨트롤 할 수있다. ex) browser.driver.findElement(by.id('name')).setKeys('username'); sample non-AngularApp.js
describe('Test the BlogSync : ', function(){
beforeEach(function (){
browser.get('http://www.justwapps.com/');
});
var go_subpage = function (page_name){
element(by.binding(page_name)).click();
};
it('allow BlogSync on the twitter to get messages', function(){
go_subpage('signstat'); //
var twitter = get_providers(providers.twitter);
twitter.click();
browser.driver.findElement(by.id('username_or_email')).sendKeys('pokers11@empal.com');
browser.driver.findElement(by.id('password')).sendKeys('XXXXXX');
browser.driver.findElement(by.id('allow')).click();
});
});
1. Connect to the main page as BlogSinc
1> check the title
2. Click the Login button on the top right of the main page
1> check the page by checking string on middle of page
2>check count of providers(now it's 7)
3. login Twitter
1> click Twitter Icon
2> After changing to Twitter page, Input ID and password, then press ENTER button.
3> Click "SignIn" button.
4. Check my accounts
1> After login, click the Login button on the top right of main page.
2> Check the string on the middle of page as "Your accounts"
3> Check the Icon on the middle of page as "twitter: <nick_name>"
5. Go to Main page
1> Click BlogSync button on the top left of the main page.
2> Check the string on the middle of page as "<nick_name>의 블로그 글들을 동기화 시킵니다."
6. Go to 블로그 등록 page
1> Click 블로그 등록 button on the top right of the main page
2> Check the list of my blog accounts as Twitter.
7. Go to 모아보기 page
1> Click 모아보기 button on the top right of the main page.
2> Check count of posts on this page
3> Check some article written by myself on the twitter.
1) check string
2) check the time
3) check image
8. Publish new article on the twitter
1> Using the blogsync app, it can publish new simple article on the Twitter.
2> After a while, it can check that article published few minutes age on the 모아보기 page.
3> Check again that is the same as number 7.
시나리오 테스트 작성 중 문제점. 새 글을 provider에 올리고 그 글이 다른 provider 및 모아보기에 적용되는지 확인을 위한 테스트. 새 글을 provider에 올리는 과정은 e2e입장에서 볼때 해당 provider page에 직접 접속해서 글을 써야한다. 각각의 provider page에 직접 쓰는 방법이 현실적으로 힘들기 때문에 각 provider가 제공하는 API를 이용해서 글을 업로드 해야한다. API의 사용은 어디에서 이루어 져야 할까?
시나리오 테스트시 Protractor 에서 blog에 new article를 postiong 하는 방법. 여러 방법이 있지만 심플하게 blogsync의 기능을 이용하기로 결정.
var opt = {
form : {
title: 'manual posting test 0101',
modified: '2015-04-26T15:07:00+09:00',
id: '3',
url: 'https://pokers11.wordpress.com/2015/04/26/test_wordpress-01/',
categories: ['미분류'],
tags: []
}
};
function sendPostToTwitter(info)
{
"use strict";
var url;
url = 'http://www.justwapps.com/twitter/bot_posts/new/3158674261?userid=553a5e54b03e147e0609d0b9';
var opt = {
form : {
title: 'manual posting test 0101',
modified: '2015-04-26T15:07:00+09:00',
id: '3',
url: 'https://pokers11.wordpress.com/2015/04/26/test_wordpress-01/',
categories: ['미분류'],
tags: []
}
};
//opt.modified = Date.now().toString();
console.log('post url : ' + url);
request.post(url, opt, function (err, response, body) {
console.log('error : ' + response.errorCode );
});
}
위에 언급한 테스트 시나리오를 코드로 작성해서 PR 등록. 해당 e2e테스트 방법에 문제가 없다면 추가 이슈 발행 후 테스트 시나리오 작성 및 구현 진행해야함.
https://docs.angularjs.org/tutorial
angularjs tutorial에 있는 e2e tests를 참고하여 blog sync용 제작.