查看: 880|回复: 1

[工具教程] appium+python+夜神模拟器+jenkins进行android端自动化测试(2)

498

主题

7763

帖子

63万

积分

管理员

居委会高大爷

Rank: 9Rank: 9Rank: 9

积分
639588

活跃会员优秀版主原创先锋论坛元老最佳新人推广达人

居委会高大爷 发表于 2017-12-21 15:21:21 | 显示全部楼层 |阅读模式
转载: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 <循环执行次数>] :
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>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())





上一篇:appium+python+夜神模拟器+jenkins进行android端自动化测试
下一篇:夜神模拟器使用后Android studio不能再使用源生模拟器
有什么事都可以找论坛我,客服联系方式: 查看,爱好:专吃美少女大腿
咨询问题,请告之电脑系统版本,电脑基本配置,配置可在电脑管家中查看,以及大的报错截图点我去提问;
脚本辅助工具: 查看辅助开发教程: 查看模拟器使用教程: 查看最新版本模拟器: 查看

1

主题

4

帖子

17

积分

新手上路

Rank: 1

积分
17
用户711957342 发表于 2018-6-2 09:33:52 | 显示全部楼层
本帖最后由 用户711957336 于 2018-6-2 09:36 编辑

可以 from XX import  XX as newName  改变模块名的方法
电脑玩手游,就用夜神安卓模拟器,www.yeshen.com免费下载使用夜神安卓模拟器。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则