Since : I always work for my future. And : Linux is the future. So: I work for Linux

网页自动测试 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);
use Test::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: Automation web automation

 

评分:0

我来说两句

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 25149
  • 日志数: 37
  • 图片数: 1
  • 建立时间: 2008-05-01
  • 更新时间: 2008-10-22

RSS订阅

Open Toolbar