用例编写

测试用例编写流程:
1、py文件以test_***取名
2、导入模块:from appium  import webdriver,import time ,import HTMLTestRunner,import unittest
3、文件中带入try  类,方法,catch  截图brower.save_screenshot()    ,final 目前在app中有通过每个页面的activity进行页面跳转
4、代码加个等待时间imidlty之类的一个


---------------------------------------------------------------------------------------------------------------
想实现在app中进行页面的滑动,现在有一个函数可能可以实现:execute_script(script, *args)
script:JavaScript 的执行。
*args:适用任何 JavaScript 脚本


下面这段代码在web中实现滑动到页面底部,然后提示,但是在app中没有实现过 。
$(document).scroll(function(){
    var scrollTop = $(this).scrollTop();
    var scrollHeight = $(document).height();
    var windowHeight = $(this).height();
    if(scrollTop + windowHeight == scrollHeight){
    alert("you are in the bottom");
    }
    });


尝试使用下面这样操作试试:
execute_script($(document).scroll(function(){
    var scrollTop = $(this).scrollTop();
    var scrollHeight = $(document).height();
    var windowHeight = $(this).height();
    if(scrollTop + windowHeight == scrollHeight){
    alert("you are in the bottom");
    }
    });)


第二种方法,不过应该不会成功:
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js
------------------------------------------------------------------------------------------------------------------------------

有关unittest的知识点
1、引入 import unittest
2、在类中继承unittest.TestCase
    class Baidu(unittest.TestCase):
3、类中的准备前,操作过程和,执行后的3个方法
4、每一个方法中可添加:
    self.verificationErrors = []  -------因为HTMLTestRunner会将错误打印在报告中,所以感觉要他没用啊。是不是在判断前置条件setup是不是正确用的?如果是前置条件的错误无法在HTMLTestRunner中体现?
 在运行过程,错误信息将配打印到这个列表中
然后在tearDown函数中可判断该函数是否为空,不为空则输出错误信息(挺重要):
self.assertEqual([],self.verificationErrors)


5、有一个:self.accept_next_alert = True
   表示是否接受下一个警告
6、在哪里调用上面这些
  if __name == '__main__':
      unittest.main()
unittest.main()函数用来执行 类中所有以test开头的测试用例
-----------------------------------------------------------------------------------------------------------------------------
每一个用例都写在一个.py文件中,那么使用HTMLTestRunner则会产生多个页面的报告,如果用例非常多都写在一个.py文件中,则代码臃肿且维护不方便,
有一个TestSuite的使用可以在一个HTMLT页面中生成多个报告
import unittest 
#这里需要导入测试文件baidu.py和youdao.py
import baidu,youdao
testunit=unittest.TestSuite()


#将测试用例加入到测试容器(套件)中 ;baidu是文件名,Baidu是类名
testunit.addTest(unittest.makeSuite(baidu.Baidu)) 
testunit.addTest(unittest.makeSuite(youdao.Youdao))
#执行测试套件 
runner = unittest.TextTestRunner() 
runner.run(testunit)


#引入HTMLTestRunner,可以在HTML中看到两个报告的文件
filename = 'D:\\selenium_python\\report\\result2.html' 
fp = file(filename, 'wb')
runner =HTMLTestRunner.HTMLTestRunner( stream=fp, title=u'百度搜索测试报告',description=u'用例执行情况:')


这里用到了unittest的makeSuite,它吧测试用例组装成TestSuite,然后TestSuite传给TestRunner进行执行


如果没有使用makeSuite则运行的是一个.py文件下类的一个方法,makeSuite是类下所有的方法都运行完
testunit.addTest(Baidu("test_baidu_search")) 
testunit.addTest(Baidu("test_baidu_set")
------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
把当前时间加入到生成报告的名称中:

------------------------------------------------------------------------------------------------------------------


这里讲的是把所有测试用例的.py文件放入一个文件夹中,然后在文件夹内新增一个__init__.py,
执行用例的py文件在文件夹外,通过__init__.py调用文件夹下的用例,那__init__.py里面要写什么:

调用用例的文件也要修改:


-----------------------------------------------------------------------------------------------------
登录,退出用例属于公共模块,也自行封装在一个test_case文件夹下的一个文件夹(public)中,然后这个public
里面也需要来一个__init__.py文件,用来搭桥梁让外部的文件调用

注明:webcloud负责打开页面,然后调用login和exit的文件,login.py中只有输入账号密码,然后点击登录,exit.py只负责退出
--------------------------------------------------------------------------------------
使用列表减少代码重复率,这个很重要要!!!


----------------------------------------------------------------------------------------------------------
因为把列表放在all_test.py中,会形成频繁改动该文件,所以在同级目录下新建一个allcase_list.py,存放是列表,然后all_test中引入:


---------------------------------------------------------------------------------------------------------------------------------
整合后的目录结构:


----------------------------------------------------------------------------------------------------------

任务,在规定时间对用例进行测试


------------------------------------------------------------------------------------------------------------------
随机获取一个值
import random


tel_list = range(13950110000,13950111000)
p_list = random.sample(tel_list,1)
print(p_list)


for i in range(1,10000):
    print(p_list)
---------------------------------------------------几种执行测试用例的方法----------------------------


-----------------------------------------------------------------------------------------------------
博客:http://m.blog.csdn.net/article/details?id=51049498
assertEaual(),assertTrue(),assertFalse(),在自动化中的使用
assertEqual(程序返回的值,我定义的值)
这个assert应该使用在自动化用例报告中用例结果值出现fail而不是error


--------通过修改HTMLTestRunner和脚本,执行文件不在报告中增加screenshot列并且截图保存----


王兴浩网盘HTMLTestRunner.py下载链接:http://pan.baidu.com/s/1geNgNEb
参考文章:https://testerhome.com/topics/7373


import unittest
import HTMLTestRunner
from selenium import webdriver
import time
index = 1


class MyTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.base_url = "http://www.baidu.com"


    png_file = 'E:\\Test_png\\'  #图片存放地址
    def screenshot(self, index):
        timestr = time.strftime('%Y%m%d',time.localtime(time.time()))  #精确到秒会无法截图,要和htmltestrunner.py文件格式一致
        img_name = timestr + '_' + str(index) + '.png'    #图片以时间+第几次截图命名
        self.driver.get_screenshot_as_file('%s%s' % (self.png_file,img_name))   #图片保存在定义路径中
        return img_name


    def test1_baidu(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("tttttttt")
        driver.find_element_by_id("su").click()
        time.sleep(2)
    def test2_baidu(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("androdi")
        driver.find_element_by_id("su").click()
        time.sleep(2)


    def tearDown(self):
        global index
        print(index)
        self.screenshot(index)
        index += 1
        print('index2' + str(index))
        self.driver.quit()


if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(MyTest("test1_baidu"))
    suite.addTest(MyTest("test2_baidu"))
    timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
    filename = 'E:\\Test_png\\' + timestr + '.html'
    runner = unittest.TextTestRunner()
    fp = open(filename,'wb')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试结果:',description=u'运行结果如下:')
    runner.run(suite)
    fp.close
-----------------------------------------------------

猜你喜欢

转载自blog.csdn.net/wanggaoxingh/article/details/79525492
今日推荐