基于Python+selenium的自动化测试基础

自动化测试简介:

*自动化的应用范围和测试用例设计:

(1)自动化测试适用于项目周期长,界面元素稳定、需求变动不频繁的项目。

(2)自动化测试用例的流程不要太长,不要有太多的分支。

(3)自动化测试脚本是把手工测试过的用例转换成脚本,但是不是所有的手工用例都能转换成脚本,转换率一般要达到70%以上。

(4)自动化测试适用于回归测试。

 

 

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum1989年发明,第一个公开发行版发行于1991年。 ---- 摘自 百度百科

此次分享主要是讲基于python的selenium自动化测试,所以,关于python语言编程的部分,我认为以够用为标准,以在工作中能用得上为导向进行学习,直接进入主题,以求达到快速入门,并能灵活运用的目的。

1. Python基础

Python目前通用的有两个版本,Python2Python3,现在大多数使用的是Python3版本,因为官网之前说过对于Python2到一定时间就不会再更新了,所以如果要学习的话,推荐从Python3开始学习。

我就说一下我学习Python语言基础的步骤:

学习Python和学习其他语言一样,都是从打印hello world开始,接着是了解Python的数据类型,分为整型(int)、字符串(str)、浮点型(float),然后学习ifelse)语句、while循环、for循环、数组和字典,接下来是函数、类、类的继承、方法等等,最后是模块的引用和调用。

在这里顺便说一下现在比较流行的Python编辑器:

1. pycharm(我用的就是这个,还比较容易上手,收费的,但是网上找破解码可以破解)。

2. ATom(开源的,我没用过)。

3. Sublime(开源的,比较出名的编辑器)

    

 

2. selenium自动化元素定位

selenium是一web的自动化测试工具可以用来做PC/h5 web自动化。

在学习元素定位之前,先看下我演示的网址页面..........

 


 

通过360浏览器的审查元素或者谷歌的F12,我们看可以看到页面上的元素都是由一行一行的代码组成。它们之间有层级的组织起来,每个元素有不同的标签名和属性值。

那么在Selenium 当中就是通过这信息来找到不同的元素的。

总结一下HTML页面中:

1. 所有的内容都是以标签的形式展现

2. 绝大多数标签以标签对的形式出现

3. 一般以什么开头,就用这个做标签名

4. 每个标签都有自己的属性

 

webdriver 提供了八种元素定位方法:

l id

l name

l class name

l tag name       标签名

l link text      文本链接

l partial link text 部分文本链接

l xpath

l css selector

 

Python 语言中对应的定位方法如下:

find_element_by_id()

find_element_by_name()

find_element_by_class_name()

find_element_by_tag_name()

find_element_by_link_text()

find_element_by_partial_link_text()

find_element_by_xpath()

find_element_by_css_selector()

 

以上一共有八种元素定位方式,具体用什么哪种方式定位,要看具体情况,哪种方便用哪种,有name的尽量用name定位,因为这个元素属性值一般不会变(我用的最多的就是name和id定位,看起来比较简单,当然最偷懒的就是直接在谷歌浏览器上copy出Css或者Xpath,定位成功率能达到80%以上)。

这里重点讲一下比较难的Xpath和Css定位元素。

Xpath是通过元素的绝对路径定位:

例如: /html/body/input

如果body下面有多个input标签,要找第三个input标签

就是 /html/body/input【3】

通过元素属性定位:

//标签名【@type(属性名)=‘属性值’】

通过层级和元素属性结合定位:

//父标签名【@type(属性名)=‘属性值’】/子标签名

Css使用选择器来为页面元素绑定属性:

其中.表示class,#表示id,例如:

find_element_by_css_selector('#moduleid_12').click()

 

 

对于web 自动化来说,学会元素的定位,那么,自动化测试已经入门了,剩下的就selenim的WebDriver中所提供的各种方法的使用,如鼠标模拟鼠标操作等。

 

 

 

 

基于目前我做的一个CRM项目中登录新增账号的自动化测试脚本:

 

 

登录Login:

from selenium import webdriver
from time import sleep

#初始化浏览器,打开浏览器

dr = webdriver.Chrome()

#通过xpath绝对路径定位登录过程
def login(self):
    d =self.dr
    d.get("http://************")  # 打开网站
    d.maximize_window()  # 窗口最大化
    d.find_element_by_xpath('//*[@id="userName"]').clear()
    d.find_element_by_xpath('//*[@id="userName"]').send_keys(100023)
    d.find_element_by_xpath('//*[@id="userPwd"]').clear()
    d.find_element_by_xpath('//*[@id="userPwd"]').send_keys(123456)
    d.find_element_by_xpath('//*[@id="Login"]').click()
    sleep(2#休眠2秒

 

 

新增帐号:

import unittest
from selenium import webdriver
from time import sleep
from study import CRMlogin1

class CrmTest(unittest.TestCase):
    def setUp(self):                         #每条用例之前执行以下内容
        self.expLoginResult ='登录系统'
        self.expaddResult ='新增帐号'
        self.dr = webdriver.Chrome()
        # self.dr.implicitly_wait(10)
        self.url = 'http://weixin-test.kemai.com.cn:6200'    #定义访问的网址url


    def testadd(self):
        dr =self.dr
        dr.get(self.url)      #访问刚才定义的网址

    #登录系统
        CRMlogin1.login(self)

        dr.implicitly_wait(5)     #设置隐式等待(5秒内找不到元素就抛出异常)
    # 通过id定位元素进入首页
        dr.find_element_by_id('lis_1').click()
        dr.find_element_by_css_selector('#moduleid_12').click() #进入帐号管理页面

# 创建帐号过程
        dr.find_element_by_css_selector('#contenter > div > div > div > div.mainHdBox > div > input.newAddIco').click()
        dr.find_element_by_css_selector('#add-user > form > div.form-body > div:nth-child(2) > div > input').send_keys(1)
        dr.find_element_by_xpath('//*[@id="add-user"]/form/div[1]/div[3]/div/input').send_keys(18665379495)
        dr.find_element_by_xpath('//*[@id="add-user"]/form/div[1]/div[4]/div/input').send_keys('361891084@qq.com')
        dr.find_element_by_xpath('//*[@id="js_select_branch"]').click()
        dr.find_element_by_xpath('//*[@id="mCSB_7_container"]/div/ul/li/div').click()
        dr.find_element_by_xpath('//*[@id="1"]').click()
        dr.find_element_by_xpath('//*[@id="savebranch"]').click()
        dr.find_element_by_xpath('//*[@id="add-user"]/form/div[1]/div[6]/div/div/label[1]/input').click()
        dr.find_element_by_xpath('//*[@id="add-user"]/form/div[1]/div[7]/div/div/label/input').click()
        dr.find_element_by_xpath('//*[@id="add-user"]/form/div[2]/input[2]').click()
        rus = dr.find_element_by_xpath('//*[@class="xcConfirm"]/div[2]/div[1]/span').text   #获取弹窗中的文本内容
        dr.get_screenshot_as_file(r'E:\CRM自动化截图\新增帐号.png')
        self.assertIn('成功',rus)
        dr.find_element_by_xpath('//*[@class="xcConfirm"]/div[2]/div[3]/div/a').click()


        def tearDown(self):         #每条用例之后执行以下内容
            sleep(3)
            self.dr.close()
if __name__ == '__main__':
        unittest.main()

 

 

生成测试报告:


import unittest,time   #导入单元测试框架、时间
from HTMLTestRunner  import HTMLTestRunner  #调入这个模块的报告样式

if __name__ == "__main__":
    #定义测试用例的存放路径
    test_dir = (r'E:\untitled\study')
    #匹配测试用例组成测试套件
    discover = unittest.defaultTestLoader.discover(test_dir,"*1.py")    #匹配以1结尾的py文件

    #定义测试报告的存放路径
    testReportDir = (r'E:\report')
    #定义测试报告的名字
    nowTime = time.strftime("%Y-%m-%d-%H_%M_%S"time.localtime())  #当前时间
    fileName = nowTime + ".html"                                    #文件名
    # 定义测试路径和测试报告名字
    report_Name = testReportDir + fileName       #文件存放地址+文件名
    #打开文件,并赋予可写权限
    fp = open( report_Name,"wb")

    #把测试结果写进测试报告,并装载到HTHMLTestRunner模块
    runner = HTMLTestRunner(stream = fp ,title "CRM自动化测试报告",description="用例执行情况")


    #运行测试用例
    runner.run(discover)

    #关闭文件
    fp.close()

 

 一起学习,共同进步!



2017.11.18

By Tiger



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值