之前Appium学习实践(二)Python简单脚本以及元素的属性设置中的脚本,会有一个问题,就是在每个测试用例完成之后都会执行tearDown,然后重新setUp,这样导致脚本的执行效率偏低,而且会有大量的重复性的步骤。当然有时测试脚本确实需要每次都重新开启一个干净的app。

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

#coding:utf-8
import unittest
import os
from selenium import webdriver
from time import sleep
import HTMLTestRunner
import time class Dttest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('start setup')
desired_caps = {}
desired_caps['platformName'] = 'iOS'
desired_caps['deviceName'] = 'iPhone 5s' 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_test(self):
sleep(10)
print('test passed') def test_click(self):
self.driver.find_element_by_name('point:').click()
sleep(5)
print('click passed') if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(Dttest('test_test'))
suite.addTest(Dttest('test_click'))
unittest.TextTestRunner(verbosity=2).run(suite)

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

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

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

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

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

代码如下

#coding:utf-8
import unittest
import os
from selenium import webdriver
from time import sleep
import HTMLTestRunner
import time class Dttest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('start setup')
desired_caps = {}
desired_caps['platformName'] = 'iOS'
desired_caps['deviceName'] = 'iPhone 5s' 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_slideAndPressSure(self):
sleep(10)
print('test passed') def test_click(self):
self.driver.find_element_by_name('point:').click()
sleep(5)
print('click passed') if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(Dttest('test_slideAndPressSure'))
suite.addTest(Dttest('test_click'))
#unittest.TextTestRunner(verbosity=2).run(suite)
timestr = time.strftime('%Y-%m-%d %X',time.localtime(time.time()))
filename = '/Users/lihui/Documents/PycharmProjects/test/report/'+timestr+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)
runner.run(suite)
fp.close()

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

结果如下

感觉还是有点简陋。、后面再研究下

Ps:生成的报告中中文乱码,将HTMLTestRunner.py中的latin-1改成utf-8

最后附上Python unittest的中文文档地址http://pyunit.sourceforge.net/pyunit_cn.html#USING

Appium学习实践(三)测试用例脚本以及测试报告输出的更多相关文章

  1. Appium学习实践(四)结构优化

    随着我们测试脚本中的用例越来越多,我们不可能将所有的用例都放在同一个脚本中,所以我们需要优化我们的结构.将脚本放在一个文件夹中,再通过别的脚本来执行脚本.这样,我们也可以有选择性的执行我们的脚本 先来 ...

  2. Appium学习实践(二)Python简单脚本以及元素的属性设置

    1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest impo ...

  3. Appium学习实践(五)遇到的坑(记录自己工作中遇到的坑以及解决方案,不定时更新)

    1.错误截图,有时候测试用例执行错误的话,相对于复杂的log,一张错误截图也许能更明确哪里出的问题(当然有时,截图+log还是最好了) 坑:本来是想测试用例fail的时候捕获异常来执行截图操作,但是由 ...

  4. JMeter学习(三十四)测试报告优化

    如果按JMeter默认设置,生成报告如下: 从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着.但对于跑失败的case,就只有一行assert错误信息.(信息量太少了,比较难找到 ...

  5. Appium学习实践(一)简易运行Appium

    环境: Appium 1.4.13 OS X  10.10.5 真机已安装app,或者未安装,通过ipa文件来安装,并启动Appium Inspector 点击Appium中的放大镜后,自动运行App ...

  6. appium学习【三】:截图时,图片命令中包含当前的函数名,以区分错误是在哪个函数报的

    import sys funcName = sys._getframe().f_back.f_code.co_name #获取调用函数名 print sys._getframe().f_code.co ...

  7. 模板学习实践三 functor

    #include <iostream>#include <typeinfo> void foo(){ std::cout << "foo() called ...

  8. airtest+poco多脚本、多设备批处理运行测试用例自动生成测试报告

    一:主要内容 框架功能及测试报告效果 airtest安装.环境搭建 框架搭建.框架运行说明 airtest自动化脚本编写注意事项 二:框架功能及测试报告效果 1. 框架功能: 该框架笔者用来作为公司的 ...

  9. selenium webdriver学习(三)------------执行js脚本

    selenium webdriver学习(三)------------执行js脚本 博客分类: Selenium-webdriver   在用selenium 1.X的时候常常会用到getEval() ...

随机推荐

  1. Boba.js – 用于 Google 统计分析 JavaScript 库

    Boba.js 是一个小的,易于扩展的 JavaScript 库,让谷歌分析(Google Analytics)的更灵活,更容易.它同时支持旧的 ga.js 库以及新的 analytics.js 库. ...

  2. go语言 类型:数组

    在go语言中数组array是一组特定长度的有序的元素集合. go的数组类型由两部分组成——类型和长度,二者缺一不可.数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定 ...

  3. jquery对象和DOM对象的互相转换

    实际开发中,jq用的很多,jq对象不能调用原生js操作方法,DOM对象当然也不能调用jq的方法,有时候我们可以用到jq对象和jsDOM对象的相互转换. 在jq中,只需要调用[index]和get(in ...

  4. Office 365 – SharePoint 2013 Online 中添加域和域名

    1.在SharePoint Online管理中心,点击菜单上的添加域,如下图: 2.进入管理域的页面,点击添加域来添加我们自己的域名,如下图: 3.进入“在 Office 365中添加新域”的向导,跟 ...

  5. An interesting experiment on China’s censorship

    This paper presented a very interesting topic. Censorship in China has always drawn people's attenti ...

  6. VMware: XXX is still busy. Please wait until the operation is complete before closing

      在使用vmware的过程中发现创建快照.恢复快照.管理快照等功能突然都变成灰色的,用不了.更觉得夸张的是仅仅剩下关闭虚机按钮是红色的.心想估计是虚机快照没处理完之类的问题导致的,于是想想关闭虚机重 ...

  7. 转 String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  8. Android提交数据到JavaWeb服务器实现登录

    之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...

  9. Android开发实战(二十一):浅谈android:clipChildren属性

    实现功能: 1.APP主界面底部模块栏 2.ViewPager一屏多个界面显示 3......... 首先需要了解一下这个属性的意思 ,即 是否允许子View超出父View的返回,有两个值true . ...

  10. OC与JS的交互

    现在APP的开发已经不局限于原生开发,很多都是原生+html5这种混合开发 我们可以通过webView这个控件,实现混合开发. 1.首先你需要创建一个html页面 <html> <h ...