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

先来看一下现在的目录结构

测试脚本统一放到了test_case文件夹中,注意这个文件夹中要添加一个__init__.py的文件,只要是这个名字就行了,内容为空

因为我们要导入这个文件夹中的module,所以我们先构建一个package,而package必须包含一个__init__.py文件

然后来看下我们的脚本

这是again.py

#coding:utf-8
import unittest
from selenium import webdriver
from time import sleep
import HTMLTestRunner
import time class againTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('开始执行againTest')
desired_caps = {}
desired_caps['platformName'] = 'iOS'
desired_caps['deviceName'] = 'iPhone 6' cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) @classmethod
def tearDownClass(cls):
cls.driver.quit()
print('执行结束') def test_sure_again(self):
u'''点击sure后点击again,回合数加1'''
self.driver.find_element_by_id('sureButton').click()
exround = int(self.driver.find_element_by_id('roundLab').text)
sleep(2)
self.driver.find_element_by_id('Again').click()
self.assertEqual(int(self.driver.find_element_by_id('roundLab').text),exround+1,'回合数不对') if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(againTest('test_sure_again'))
timestr = time.strftime('%Y-%m-%d %X',time.localtime(time.time()))
filename = '/Users/lihui/Documents/PycharmProjects/AppDemo/report/'+timestr+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)
runner.run(suite)
fp.close()

reset.py

#coding:utf-8
import unittest
from selenium import webdriver
from time import sleep
import HTMLTestRunner
import time class resetTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('开始执行resetTest')
desired_caps = {}
desired_caps['platformName'] = 'iOS'
desired_caps['deviceName'] = 'iPhone 6' cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) @classmethod
def tearDownClass(cls):
cls.driver.quit()
print('执行结束') def test_reset(self):
u'''直接点击reset,回合数变为1'''
self.driver.find_element_by_id('sureButton').click()
sleep(2)
self.driver.find_element_by_id('Again').click()
self.driver.find_element_by_id('resetButton').click()
self.assertEqual(int(self.driver.find_element_by_id('roundLab').text),1,'回合数不对') if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(resetTest('test_reset'))
timestr = time.strftime('%Y-%m-%d %X',time.localtime(time.time()))
filename = '/Users/lihui/Documents/PycharmProjects/AppDemo/report/'+timestr+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)
runner.run(suite)
fp.close()

all_tests.py

#coding=utf-8

import unittest
import sys
sys.path.append("/test_case")
#添加test_case目录 from test_case import again,reset
import HTMLTestRunner
import time alltestnames = [again.againTest,
reset.resetTest,
]
#添加执行的测试用例
testunit = unittest.TestSuite() for test in alltestnames:
testunit.addTest(unittest.makeSuite(test)) timestr = time.strftime('%Y-%m-%d %X',time.localtime(time.time()))
filename = '/Users/lihui/Documents/PycharmProjects/AppDemo/report/'+timestr+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='result',
description='report'
)
runner.run(testunit)
fp.close()
print('执行完毕,报告路径:'+filename)

执行all_tests之后生成的测试报告

比起Appium学习实践(三)测试用例脚本以及测试报告输出中的测试报告,可以看到增加了中文描述,这样报告看起来也更加明了些

测试报告中根据2个测试脚本文件分开显示测试结果,实际中,我们可以将一个模块的测试用例写到一个脚本中,这样更方便管理

如果我们要执行单个模块的测试用例只要执行test_case中对应的脚本就行了

当然,如果要执行多个但不是全部的脚本,则在all_tests.py中alltestnames进行设置,要执行哪些就添加哪些

Ps:感觉到目前为止的都是基本的东西。后面会添加一些自己在实际编写脚本中遇到的坑。。

Appium学习实践(四)结构优化的更多相关文章

  1. Appium学习实践(三)测试用例脚本以及测试报告输出

    之前Appium学习实践(二)Python简单脚本以及元素的属性设置中的脚本,会有一个问题,就是在每个测试用例完成之后都会执行tearDown,然后重新setUp,这样导致脚本的执行效率偏低,而且会有 ...

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

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

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

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

  4. Android最佳性能实践(四)——布局优化技巧

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43376527 在前面几篇文章其中.我们学习了怎样通过合理管理内存,以及高性能编码技 ...

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

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

  6. Java学习之Mysql结构优化

    背景:业务发展初期为了便于快速迭代,很多应用都采用集中式的架构,随着业务规模的扩展,系统变得越来越复杂,访问量越来越大,不得不进一步扩展系统的吞吐能力. 优化1.主从集群:通过数据库的复制策略,可以将 ...

  7. Django学习之项目结构优化

    其实就是采用包结构,比如: 目录models,包含__init__.py,a.py,b.py 然后将model class写在a和b中,但是这样的话,导入时就要改变了! from models imp ...

  8. appium学习【四】:第一个appium脚本

    #coding=utf-8 import os import HTMLTestRunner import unittest import time import sys from appium imp ...

  9. android 项目学习随笔四(优化ViewPager)

    1.不能滑动的ViewPager import android.content.Context; import android.support.v4.view.ViewPager; import an ...

随机推荐

  1. mysql win源码比较大 不需要的文件删除 记录下来

    mysql-5.6.25-win32.zip 从官方下载下来的大小为 343MB,太大了可以删除掉的地方记录一下 docs :全部删除. sql-bench:全部删除. mysql-test :全部删 ...

  2. ABAP 加密解密程序

    用于对字符串的加密和解密: DATA: o_encryptor TYPE REF TO cl_hard_wired_encryptor, o_cx_encrypt_error TYPE REF TO ...

  3. 解决ReSharper自动删除换行

    使用Devexpress+ReSharper进行开发,似乎是C/S开发的最佳搭配. 但在ReSharper使用时,发现一个非常烦人的问题:即按F5进行调试时,自动删除换行,这样不仅把代码搞乱了,而且有 ...

  4. JavaScript滚动条插件源码

    这是过年的时候自己写的js滚动条插件的源码,做出的效果自己并不满意,正因为做的并不满意所以回头重新巩固和深入学习js,这个插件有如下几个不太满意的地方: 内容的过度效果,可以参阅QQ客户端最近会话列表 ...

  5. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)

    在之前的博客中我介绍过Autodesk的照片建模云服务—Autodesk ReCap 360 photo,通过Autodesk ReCap 360 photo,你可以非常方便的通过照片生成三维模型.如 ...

  6. JSOM 对User的操作

    一.操作当前用户 //Load current user info function LoadCurUser() { var curUser; curUser = curWeb.get_current ...

  7. filezilla sftp 文件和linux 文件不同步的问题

    删除掉以前的链接,重新建立链接就好了

  8. 【VLC-Android】Mac下编译vlc-android

    前言 突然想整整VLC-Android,然后就下一个玩玩看,这里记录点遇到的问题. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: htt ...

  9. Web应用程序系统的多用户权限控制设计及实现-总结【11】

    Web应用程序系统的多用户权限控制设计及实现通过10章内容讲述已经结尾了.写这些博客的目的很简单,方便自己以后参考,也留下自己编程岁月的一些痕迹.对于编程,对于工作,真是心甘情愿的就好. 由于这只是一 ...

  10. SVN 使用锁实现独占式签出

      SVN默认并行工作,但是自动合并又做得很渣.团队工作中,如果确实有一些文件希望独占式签出可以使用SVN的特别属性.       Subversion针对此问题的解决方案是提供一种机制,提醒用户在开 ...