海是我向往的地方,吸纳和咆哮是他的魅力!!!
网页自动测试 6. 细节的继续和完成(转)
上一篇 /
下一篇 2008-06-03 10:03:36
网页自动测试 6. 细节的继续和完成
2008-06-03 06:44:38 / 个人分类:automation
(要保持一个每天都写写的习惯还真的不是很容易)
细节的东西花费的时间是最长的。因为它最是繁琐。
我的selenium
automation包含的细节步骤如下:
1 录制:recording scrīpts
这部分是利用selenium 的 IDE firefox plugin 完成的
2 修改录制的脚本。
录制的脚本里面包含的都是固定的
测试数据。
自动化测试需要的是动态的数据。所以如果仅仅依靠录制的脚本是无法完成自动化测试的。
2-1 录制的脚本样本如下:
下面这段代码是用来改变用户的居住的城市的数据。
use strict; use warnings; use Time::HiRes qw(sleep); useTest::WWW::Selenium; use Test::More "no_plan"; use Test::Exception;
my $sel = Test::WWW::Selenium->new( host => "localhost", port => 4444, browser => "*firefox", browser_url => "http://localhost:4444" ); $sel->open_ok(https://ipaserver.test.com/ipa/user/show?uid=a001); $sel->wait_for_page_to_load_ok("30000"); $sel->click_ok("//input[\@value='Edit User']"); $sel->wait_for_page_to_load_ok("30000"); $sel->type_ok("form_l", "San Francisco"); $sel->click_ok("document.form.submit[2]"); $sel->wait_for_page_to_load_ok("30000"); $sel->is_text_present_ok("a001updated!"); $sel->is_text_present_ok("City: San Francisco");
|
可以看到这里面有很多需要改动的地方。以上红色的部分都是需要根据实际测试需要而临时变化。(1) 用户名,(2)(新)地址。
除此之外,测试用户(a001)必须要先建立,然后才能进行这项测试,而在测试之后,这个测试用户也必须要删除,以免影响后续的测试。所以,一个完整的逻辑如下:
IPAutil::env_check($host, $port, $browser, $browser_url, $ldap_server, $base, $scope, $adminpw); prepare_data(); run_test($testdata); cleanup_data($testdata);
|
简单的说,任何单个完整的测试程序都需要包含这些基本元素:
* 设立测试环境
* 测试数据准备和建立
* 测试
* 测试数据清除和测试环境归原
上面这段脚本程序如果用手工,时间太长(完整的程序附后)所以我又写了另外一个程序去自动生成上面的脚本。
=========================
下面是一个完整的测试程序
#!/usr/bin/perl
use strict; use warnings; use Time::HiRes qw(sleep); use Test::WWW::Selenium; use Test::More tests => 9; use Test::Exception; use Net::LDAP; use Net::LDAP::Util qw(ldap_error_text);
use lib '/home/yi/workspace/ipawebgui/support'; use IPAutil; use IPADataStore;
# global veriables our $configfile="test.conf"; our $testid=1038; our $testuid; our $testgid; our $testfulluid; our $testfullgid; our $testdata; our @datakeys=("form_l");
our $host; our $port; our $browser; our $browser_url; our $sel;
our $ldap_server; our $base; our $scope; our $adminpw; our $ldap;
our $ssh; our $ipaadmin; our $ipaadminpw; our $grpdesc;
# read configruation file our $config=IPAutil::readconfig($configfile); $host=$config->{'host'}; $port=$config->{'port'}; $browser=$config->{'browser'}; $browser_url=$config->{'browser_url'};
$ldap_server=$config->{'ldap_server'}; $base=$config->{'base'}; $scope=$config->{'scope'}; $adminpw = $config->{'adminpw'}; $ldap = Net::LDAP->new($ldap_server)or die "ldap error: $@ \nsuggest: check your firewall"; my $result=$ldap->bind( "cn=directory manager", password => $adminpw, version => 3 );
# we might not need this block, but leave them here for now # ldap bind need test before all test starts if ( $result->code ) { print " failed, error as below: "; my $errstr = $result->code; print "Error code: $errstr\n"; $errstr = ldap_error_text($errstr); print "$errstr\n"; exit 1; }else{ print "bind as 'cn=directory manager' success\n"; }
$ssh = "ssh root\@$host"; $ipaadmin = $config->{"ipaadmin"}; $ipaadminpw = $config->{"ipaadminpw"};
# Test starts here $testuid="seluser_".$testid; $testgid="selgrp_".$testid; $testfulluid="uid=sel_user_".$testid.",".$base; $testfullgid="cn=sel_grp_".$testid.",cn=groups,cn=accounts,".$base;
$grpdesc = "automatic generated, gid=$testgid";
IPAutil::env_check($host, $port, $browser, $browser_url, $ldap_server, $base, $scope, $adminpw); prepare_data(); run_test($testdata); cleanup_data($testdata);
#=========== sub =============
sub run_test { # test case name (admin_edituser_city) from source (admin_edituser_city.pl) # auto generated at 2008/5/26:10:37:52 $sel = Test::WWW::Selenium->new(host=>$host,port=>$port,browser=>$browser,browser_url=>$browser_url); #$sel->open_ok(https://ipaserver.test.com/ipa/user/show?uid=a001); $sel->open_ok("/ipa/user/show?uid=$testuid"); $sel->wait_for_page_to_load_ok("30000"); $sel->click_ok("//input[\@value='Edit User']"); $sel->wait_for_page_to_load_ok("30000"); $sel->type_ok("form_l", "$testdata->{'form_l'}"); $sel->click_ok("document.form.submit[2]"); $sel->wait_for_page_to_load_ok("30000"); $sel->is_text_present_ok("$testuid updated!"); $sel->is_text_present_ok("City: $testdata->{'form_l'}"); } #admin_edituser_city
sub prepare_data{ kinit(); # this has to run before any selenium test starts $testdata = IPADataStore::construct_testdata($testid, @datakeys); #IPAutil::ldap_adddummyuser($ldap, $testfulluid); #IPAutil::ldap_adddummygroup($ldap, $testfullgid); IPAutil::ipa_createuser($ssh, $testuid); #IPAutil::ipa_creategroup($ssh, $testgid, $grpdesc); }
sub cleanup_data{ #IPADataStore::cleanup_testdata($testid, $testdata); #IPAutil::ldap_delete($ldap, $testfulluid); #IPAutil::ldap_delete($ldap, $testfullgid); IPAutil::ipa_deleteuser($ssh, $testuid); #IPAutil::ipa_deletegroup($ssh, $testgid); kdestroy(); }
sub kinit{ my $kinitcmd = "$ssh \"echo $ipaadminpw | kinit $ipaadmin\""; my $result = `$kinitcmd`; if ($result =~/kinit/){ #error 1: kinit(v5): Cannot resolve network address for KDC in realm ...bla bla bla #error 2: kinit(v5): Password incorrect while getting initial credentials return 0; }else{ my $klist = "$ssh klist"; my $init_result = `$klist`; if ($init_result =~ /klist: No credentials cache found/){ return 0; }else{ return 1; } }#if kinit success, then double confirm with klist }#kinit
sub kdestroy{ my $kdestroycmd = "$ssh kdestroy"; my $result = `$kdestroycmd`; }#kdestroy
|
收藏
举报
TAG: