|
|
楼主 |
发表于 2017-12-20 22:16:14
|
显示全部楼层
Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例
1 g0 {# s" h+ V; |0 s* D3 y% H2 X9 B" R- G) q' y" E; H) t
#coding=utf-8$ M# \- u" @7 Y% e
from selenium import webdriver7 a3 s+ w3 b5 x( X6 f# M! s
from selenium.webdriver.common.by import By5 \/ e7 ]3 ]" Z, h) \
from selenium.webdriver.common import keys
; X/ v# T% _$ h7 e) w( m8 e7 Tfrom selenium.webdriver.support import select) H; p8 r! v1 q4 H8 f5 V0 U4 I5 C
from selenium.common import exceptions- p+ d0 Y* P! v1 d- G. w
import unittest,time,re6 n4 k4 }; R) i7 L
class Baidu(unittest.TestCase):
) u7 \' o9 ^5 \! K' a7 m; ? #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#* Q* Y. Y7 E+ N( O% ?% v3 p
def setUp(self): ' d% g7 G- k b% M, z& d0 v6 R
self.driver=webdriver.Firefox()
8 {- }4 U5 s+ P; e$ ?' m self.driver.implicitly_wait(30)" a1 j) s# t0 a
self.base_url='http://www.baidu.com/'* q* r; A# y' D& Y
self.verificationErrors=[] #脚本运行时,错误的信息将被打印到这个列表中#$ X3 W- ^# \# s/ A/ |( _: W
self.accept_next_alert=True #是否继续接受下一个警告#" E# L2 d" w/ Z6 v
#百度搜索用例
' c7 H& U: x$ C: |) h def test_baidu_serch(self):) \2 n8 P6 g" ~/ v3 Q7 X$ b1 R9 n9 J
driver=self.driver
$ B2 x0 t1 j/ g. J( w- l3 j driver.get(self.base_url)$ r) B- L3 ~, l
driver.find_element_by_id("kw").send_keys("selenium webdriver")
* k7 n' K; u3 W+ O6 I" Q/ g% g" ` driver.find_element_by_id("su").click()3 h9 v2 s0 l w- m6 k0 Z
time.sleep(2)
* b) H7 s' D Q5 k* ? driver.quit()* q1 ?7 E3 g' R" x! E( t, [! [
#百度设置用例 ?) ]4 o- U% A$ I1 P
def test_baidu_set(self):# E3 k% J! X8 ]1 {5 _& R
driver=self.driver& l' H* ?( _9 G- h& s5 k
#进入搜索设置页
1 M( Z. Q8 ?2 X+ q7 ^0 G c driver.get(self.base_url+'gaoji/preferences.html')
, x$ Q/ @, j! M& g/ I m=driver.find_element_by_name('NR')
& D% R6 j" M! h5 x #设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮% J! j3 n$ { L* B( T6 O1 i4 A
m.find_element_by_xpath("//option[@value='100']").click()
8 `+ A5 t% R7 l1 E6 i time.sleep(2)# W& A# e v6 J9 v
#保存设置的信息
3 a# r* `, l1 v0 o" f driver.find_element_by_xpath("//input[@value='保存设置']").click()5 q! l* a: A, B$ r" J. g3 {' e
time.sleep(2)% x) R9 Y( x' }$ W K1 [
n=driver.switch_to_alert()& | N& r0 f$ O. f- U! J
n.accept()2 ^! m3 z2 `6 F0 G' ^1 X1 T
def tearDown(self):3 T4 D, Z0 c# e* s' y
self.driver.quit(), n; t/ r% [; r& K
self.assertEqual([],self.verificationErrors)/ r0 W6 r/ ^- e6 q
'''
& c1 {6 `* H- r* {% c" C9 H tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
$ P3 \% ~+ i5 ^5 ? self.assertEqual([], self.verificationErrors) 是个难点, H d3 g6 u8 o( M/ r
对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
0 h" Q S/ P% ?# a' K3 U" Xif __name__=="__main__":
/ @% o5 ~1 ? |6 L unittest.main() #执行用例#- s) m2 W' L- Y# ~! |$ t4 ~& C- X
3 r6 o9 L3 N Y0 S& ~, P! O
'''
% I( Y( u$ \6 g# C7 a" p执行结果如下:
& F& z: f! g5 b7 ]8 M4 R) |- URan 2 tests in 30.719s 执行测试完所有测试用例,用了70.719S
2 W, y3 I/ n- [( [' d& V9 N
5 e8 W$ a: ] u& ~2 E% hok 没有问题
5 T: \, W9 H8 {
5 m5 ]) P$ ]" K1 y* f* a如果你在用例中故意设置一个错误,例如:* U8 m0 {9 S) @: {' N( K
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,
* m: B0 R- O8 d9 udriver.find_element_by_name('DR').click(), l( @" G5 ^ k1 X5 m2 T6 s6 U, D
这时执行结果显示如下:
# [# K: p$ O# B& s; P: d" lRan 2 tests in 70.719s! U) C3 \3 @5 P. F; n* w
* h8 ^) d4 `) zFAILED (errors=1)0 L, S V4 y/ D% Y+ z4 g/ _
'''
3 u5 f S, P/ w4 b0 P7 y! T
1 h5 Q& S6 i3 w; b& I |
|