appium+python+夜神模拟器+jenkins进行android端自动化测试(2)

转载:http://blog.csdn.net/testing_su001/article/details/78191010

基于上一篇的初步框架搭建和测试appium+python+夜神模拟器+jenkins进行android端自动化测试,本篇将记录对脚本编写框架优化后的情况;

整体框架如下:


common:共通方法目录

report:测试报告目录,根据循环测试的次数,形成对应的报告

testcase:具体测试用例目录,并返回用例suite

allcase_list.py:整合所有的测试用例,形成一个testsuite

app.py:启动app应用,定义全局变量webdriver,供整个测试过程调用

test_main.py:测试入口,接受测试循环次数,执行测试,形成测试报告;


在整合这个框架的过程中遇到一个问题:因需循环测试app,webdriver session会根据每次启动程序而发生改变(第二次启动通过定义的方法实现);为此定义了全局变量GLOBAL_DRIVER供整个测试过程调用,每次启动修改此全局变量;

testcase中引用的方式就很重要,如果采用from XX import GLOBAL_DRIVER   则永远获取到的是第一次产生的webdriver;需直接import XX,然后通过XX.GLOBAL_DRIVER方式调用方可;

大致理解应该是通过from XX import的方式,直接将变量导入到了当前模块,成为当前模块的一个变量;后续全局变量值的改变,XX无法感知,当前模块也无法感知;

import XX的方式,是在当前模块建议了一个XX的引用,XX的所有改变,XX可以感知,当前模块也可以感知

不知理解可对,欢迎有经验人士指教;

test_main.py代码如下


import getopt,sys
import unittest
import allcase_list
import HTMLTestRunner
import time
import app

def main(argv =None):
if argv isNone:
argv = sys.argv
try:
try:
opts, args = getopt.getopt(argv[1:], "hn:",["help"])
except getopt.error as msg:
raise Usage(msg)
except Usage as err:
print(sys.stderr, err.msg)
print(sys.stderr, 'for help use --help')
return 2

helpstr = '''Usage:
[-n <循环执行次数>] :

Exampl
python2 test_main.py -n 2
'''
number=1
for opt, value in opts:
if opt == "-n":
number = int(value)
if opt in ("-h","--help"):
print(sys.stderr,helpstr) 
loop(number)

def loop(number):
curnumber=number
if curnumber==number:
start_test(curnumber)
curnumber=curnumber-1

while curnumber>0and curnumber<number:
time.sleep(5)
app.start_app()
start_test(curnumber)
curnumber=curnumber-1

def start_test(curnumber):
try:
suite_main = allcase_list.caselist()
print suite_main

filename = 'report/FCTest'+str(curnumber)+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)

#执行测试形成报告
runner.run(suite_main)
fp.close()
if app.GLOBAL_DRIVER:
app.GLOBAL_DRIVER.quit()

except Exceptionas e:
print e.message
if app.GLOBAL_DRIVER:
app.GLOBAL_DRIVER.quit()

if __name__ =="__main__":
sys.exit(main())