appium+python+windows执行测试用例,并使用HTMLTestRunner输出测试报告

搭建环境时有一个问题,就是在每个测试用例完成之后都会执行tearDown,然后重新setUp,这样导致脚本的执行效率偏低,而且会有大量的重复性的步骤。当然有时测试脚本确实需要每次都重新开启一个干净的app。

下面说下怎样让一个测试用例执行完毕后接着执行后面的测试用例而不是重置。

复制代码
#coding:utf-8
__author__ = 'justwin'
import unittest
import os.path
from appium import webdriver
from time import sleep
import HTMLTestRunner
import time

class Dttest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('start setup')

desired_caps = dict(platformName='Android', deviceName='b67201a', platformVersion='5.0', appPackage='com.taobao.taobao',
appActivity='com.taobao.tao.homepage.MainActivity3')

cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

@classmethod
def tearDownClass(cls):
cls.driver.quit()
print('tearDown')

def test_search(self):
time.sleep(5)
self.driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click() #点击搜索框
sleep(5)
self.driver.press_keycode(4) #点击返回键
sleep(2)
self.driver.press_keycode(4) #点击返回键
print('search passed')
sleep(2)

def test_click(self):
self.driver.find_element_by_id("com.taobao.taobao:id/bar_search").click() #点击扫一扫
sleep(2)
self.driver.press_keycode(4) #点击返回键
print('click passed')

if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(Dttest('test_search'))
suite.addTest(Dttest('test_click'))
unittest.TextTestRunner(verbosity=2).run(suite)
runner.run(suite)
fp.close()
复制代码

这是使用的是Python的unittest中的setUpClass和tearDownClass,请见官方文档:https://docs.python.org/2/library/unittest.html

 会先执行test_search,执行完毕后再执行test_click,两个测试用例执行完毕后再执行tearDownClass

 ----------------------------------------这里是分割线----------------------------------------

如果我们只能在命令行看到运行结果的话,有点不美,如果最后能有个report是不是能更好呢

下面来说下测试报告的输出,用的是HTMLTestRunner

代码如下

复制代码
#coding:utf-8
__author__ = 'justwin'
import unittest
import os.path
from appium import webdriver
from time import sleep
import HTMLTestRunner
import time

class Dttest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('start setup')

desired_caps = dict(platformName='Android', deviceName='b67201a', platformVersion='5.0', appPackage='com.taobao.taobao',
appActivity='com.taobao.tao.homepage.MainActivity3')

cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

@classmethod
def tearDownClass(cls):
cls.driver.quit()
print('tearDown')

def test_search(self):
time.sleep(5)
self.driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click() #点击搜索框
sleep(5)
self.driver.press_keycode(4) #点击返回键
sleep(2)
self.driver.press_keycode(4) #点击返回键
print('search passed')
sleep(2)

def test_click(self):
self.driver.find_element_by_id("com.taobao.taobao:id/bar_search").click() #点击扫一扫
sleep(2)
self.driver.press_keycode(4) #点击返回键
print('click passed')

if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(Dttest('test_search'))
suite.addTest(Dttest('test_click'))
unittest.TextTestRunner(verbosity=2).run(suite)
timestr = time.strftime('%Y-%m-%d_%H-%M-%S',time.localtime(time.time()))
print (time.localtime(time.time()))
filename = r'D:\test-suite\reprot' + timestr + '.html'
print (timestr)
print (filename)
fp = open(filename,"wb")
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)
runner.run(suite)
fp.close()
复制代码

由于windows系统中文件名不能包含冒号,所以对输出报告文件名中的时间格式做了修改,不然一直报错,搞了好长时间

 

本文部分转载,部分属于自己改善,如有疑问,可联系删除

 

最后会在我们设定的文件夹中生成一个以日期命名的html的报告,当然也可以自行改名(文件夹的名字先自己建好)

posted @ 2017-05-19 09:25  且行且忆  阅读(273)  评论(0编辑  收藏  举报