Selenium UI 自动化数据驱动框架简单实现

红客联盟 · 2018年06月07日 · 2447 次阅读

自我介绍一下,我是一枚计算机专业的应届生。这是第一次在社区发技术帖,最近一直在学习测试这一块内容,平时喜欢写一些代码玩一下,现在把写的东西发出来大家看看有什么可以改进的问题,避免自己闭门造车,也记录和整理一下自己的思路,方便以后查看

数据驱动框架

1.不是一种技术,而是一种理念,个人觉得和 MVC 设计模式有一些相似的地方

2.测试代码和测试数据分离,易于维护,而且测试用例和代码开发可以同步进行,提高效率

3.是关键字驱动的低级版本

项目结构

1.case 包:用例包,存放测试用例

2.common 包:公共包,存放公共模块

3.data 包:数据包,存放输入输出的数据

4.read_excel 包:读取数据,根据输入的不同模块、类和方法调用不同测试用例

主要代码模块

class login:#系统登录模块
    def __init__(self,driver):
        self.driver=driver
    def login(self):
        self.driver.find_element_by_id('emp_no').send_keys('admin')
        self.driver.find_element_by_id('password').send_keys('admin')
        self.driver.find_element_by_xpath('/html/body/div/div/div/div[2]/div[2]/form/div[4]/div/input').click()

登录系统的公用模块分离出来单独调用

class setup:#驱动初始化模块
    def __init__(self):
        driver=webdriver.Firefox()
        driver.implicitly_wait(30)
        driver.maximize_window()
        driver.get("http://localhost/smeoa/login")
        self.driver=driver

驱动初始化模块也是公共模块

class start():#控制模块,包括用例执行,验证,将验证结果写入日志
    def __init__(self):
        dr=setup().driver
        login(dr).login()
        self.dr=dr
    def case(self,li):
       ribao(self.dr).ribao(li[0],li[1])
       biaoti = self.dr.find_element_by_xpath(
           '/html/body/div[2]/div/div[2]/div[2]/div/div/div[4]/ul/li[2]/div[3]/a').text
       print(biaoti)
       if li[0] == biaoti:
           print('success')
           self.read('success')
       else:
           print('false')
           self.read('false')
    def read(self,info):
        with open(r"D:\python\python-test\demo\selenium_package\auto_moudle\data\log.txt",'a+') as f:
            content=f.write(info+'\n')
    def __del__(self):
        time.sleep(5)
        self.dr.close()
#测试数据读取
book=xlrd.open_workbook(r'D:\python\python-test\demo\selenium_package\auto_moudle\data\case.xlsx')
s=book.sheets()[0]
for i in range(1,s.nrows):
    read=s.row_values(i)
    li=read[3:]
    print(read)
    #测试模块动态调用
    __import__('demo.selenium_package.auto_moudle.case.'+read[0])
    m=sys.modules['demo.selenium_package.auto_moudle.case.'+read[0]]
    type=getattr(m,read[1])
    method=getattr(type(),read[2])
    method(li)
class ribao:#测试用例
    def __init__(self,driver):
        self.driver=driver
    def ribao(self,name,text):
        self.driver.find_element_by_xpath('/html/body/nav/div[2]/ul/a[7]/i').click()
        self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div/div[3]/div/div[2]/a').click()
        self.driver.find_element_by_id('name').send_keys(name)
        self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div/form/div[2]/div/div/a').click()
        self.driver.switch_to.frame(self.driver.find_element_by_class_name('myFrame'))

输入数据展示

后记

1.其实就是个面向对象思想的实践,然后用反射机制加载类实现动态模块加载,仔细想一下还是不难,但是感觉有很多不足,欢迎大佬指正
2.还可以自动生成漂亮的测试报表,代码都研究好了,还没来得及整合进来。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册