- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2017-12-20 22:16:14
|
显示全部楼层
Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例8 ^- \9 |( f& t; ], y. x' b
4 c& Q1 J! l; d. \
#coding=utf-87 o5 j' @+ p" j+ {2 ~! C0 D
from selenium import webdriver
6 k2 ?& `" H; U- S* ]from selenium.webdriver.common.by import By0 W. ~8 K3 M, h8 v* h
from selenium.webdriver.common import keys4 _6 R8 e" Q, {
from selenium.webdriver.support import select
( X Q s1 P. Q. {2 ffrom selenium.common import exceptions* S1 o. }9 t3 ?0 R( ?/ k
import unittest,time,re. N2 Q: b& t1 D7 h
class Baidu(unittest.TestCase): y W7 U5 X& \7 P# R( |/ [! H* m
#setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#: s" j$ N% G- [3 |- q2 G5 s; Z; I
def setUp(self): 9 e5 N5 Q H% f3 ~
self.driver=webdriver.Firefox()0 J1 p2 _" N# o. ~
self.driver.implicitly_wait(30)
: c2 n# s' ^8 H2 N9 d7 { self.base_url='http://www.baidu.com/'
. W. f" q2 c) M6 j* K self.verificationErrors=[] #脚本运行时,错误的信息将被打印到这个列表中#$ g3 R6 }& y" [7 Y/ I2 ?
self.accept_next_alert=True #是否继续接受下一个警告#4 A; t7 C: e4 j( C# Z8 t2 K( g0 O$ w
#百度搜索用例/ N0 ]# X3 ~2 c6 Z p
def test_baidu_serch(self):6 Y; g; m9 O8 y+ F0 E# [: }
driver=self.driver* q. r& I. y0 R$ x |
driver.get(self.base_url)# \1 O/ F8 D3 u2 S Q( d9 J" [
driver.find_element_by_id("kw").send_keys("selenium webdriver")
8 g7 ?& B- _; ]4 g% A# p. x driver.find_element_by_id("su").click()' x0 B ^6 @+ @& {. q6 b( j+ S7 I
time.sleep(2)
: ~2 `5 I, [- R, |4 a driver.quit()! Z9 j8 l' i2 z9 L
#百度设置用例
) k6 s' k# N+ t def test_baidu_set(self):
( b y; X3 e/ E. L* d driver=self.driver4 x4 Z, o" _, e* [0 d, N
#进入搜索设置页
) b* y7 m2 |7 w$ ^5 c1 o, Y6 i driver.get(self.base_url+'gaoji/preferences.html')
1 L( Y' E6 }" ~1 c* w m=driver.find_element_by_name('NR') ; C; u6 k3 O9 H! L# J
#设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮
( x1 @( M$ ~7 Q1 ]! U! q m.find_element_by_xpath("//option[@value='100']").click()
6 j' G) x8 F% S& Q! p2 z time.sleep(2)3 V3 u8 A# C; k4 e( z* c! i
#保存设置的信息
9 x T* T) V* c& y4 N driver.find_element_by_xpath("//input[@value='保存设置']").click()
6 V! J+ d# \: m* F7 h+ r' N' \$ H time.sleep(2)
8 c1 B2 R. U1 ]& z n=driver.switch_to_alert()
1 d5 d. n, ]3 W t n.accept()+ h7 H5 {5 w+ d) u( \
def tearDown(self):
* ^% p7 i8 I z; \: u self.driver.quit()
8 s5 r" G. i' |) S$ T8 B8 e self.assertEqual([],self.verificationErrors)2 e" d) o9 S( H% L
'''8 w$ f- z/ A+ R: T9 p
tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。 5 j- q# r6 ~" S3 E# s
self.assertEqual([], self.verificationErrors) 是个难点, D4 p& J- V- G0 [
对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
4 D" ~6 h* B+ B# I, K) tif __name__=="__main__":8 H' ^$ t- j5 i: }7 G, |
unittest.main() #执行用例#% F) r0 E6 c# ?2 @2 m
& q; o& i$ a% O( n+ ^/ Y'''
* ^" r8 A( ^ o/ y3 s! B% _执行结果如下:
8 @, K& o% q# @$ O MRan 2 tests in 30.719s 执行测试完所有测试用例,用了70.719S
6 f l" y$ R m! x
4 k. r) ]1 y9 L3 H, U; Z( nok 没有问题 S6 A; i" S$ l9 |( r9 }" x
& ^. M( i6 Y! \( A5 ^如果你在用例中故意设置一个错误,例如:5 s0 s1 G c$ r! u- C
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,/ n5 U: f J% h5 e5 A- C% {
driver.find_element_by_name('DR').click()1 k+ g* D3 \& a
这时执行结果显示如下:% q- Q! E; l$ V5 A% V5 B! m2 t
Ran 2 tests in 70.719s
; j: g' }1 u! o. a# z
% W1 L6 |+ l9 G. I& g6 cFAILED (errors=1)
. f; E, Y9 \ \4 _" d) V: X'''
$ Y$ e6 ^0 Z5 C5 r" v% \
9 f0 Q& m0 G7 j" D/ w* y" [4 j: V |
|