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

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

整体框架如下:

appium+python+夜神模拟器+jenkins进行android端自动化测试(2)_第1张图片

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 is None:
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 <循环执行次数>] :
2
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> 0 and curnumber
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 Exception as e:
print e.message
if app.GLOBAL_DRIVER:
app.GLOBAL_DRIVER.quit()
if __name__ == "__main__":
sys.exit(main())

你可能感兴趣的:(自动化测试(android),Python)