模块化驱动测试

模块化驱动测试:把常用、公用的一些功能、业务、步骤专门提取出来,写在一个专门的模块中,以方法、类的形式实现出来,再其他的模块如果需要这些功能,直接调用即可,无需重复显示这些代码。最大限度的消除了重复,提高了测试用例的可维护、复用性。
比如可以做登录模块、退出模块、邮件发送模块、数据库处理模块等。
1、电商系统的登录、退出模块
在自动化测试用例中,有很多是需要先登录再进行操作的,所以我们可以将登录做成模块,在使用的时候进行调用即可。

class verydows():
    def verylogin(self,driver):
        #1、打开verydows电商系统的首页:http://xx.xx.xx.xx/verydows/
        driver.get("http://xx.xx.xx.xx/verydows/")
        #写一句隐形等待
        driver.implicitly_wait(10)
        # 2、点击其中的登陆按钮
        driver.find_element_by_link_text('登陆').click()
        # 3、输入正常的用户名
        driver.find_element_by_id('username').send_keys('sz1902_002')
        # 4、输入正常的密码(与登陆用户名一致的密码)
        driver.find_element_by_id('password').send_keys('123456')
        # 5、点击登陆
        driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
        #再点击登陆之后需要等待5秒,跳过中间界面
        time.sleep(5)
        #( 验证是否能登陆成功)
        expectLoginUrl = 'http://xx.xx.xx.xx/verydows/verydows/index.php?c=user&a=index'
        actualLoginUrl = driver.current_url
        if expectLoginUrl==actualLoginUrl:
            print("跳转登陆成功页面,正向的登录用例通过")
        else:
            print("未能跳转登陆成功页面,正向的登录用例失败")

    #退出登陆的 方法
    def veryLogout(self,driver):
        driver.find_element_by_xpath('//*[@id="top-userbar"]/a').click()
        driver.find_element_by_link_text('退出').click()

    #关闭浏览器的方法
    def veryquit(self,driver):
        driver.quit()

2、邮件发送模块
在自动化测试脚本运行结束之后,可以调用邮件发送模块将测试报告,发送给相关责任人的邮箱,不需要手动去发邮件。

import smtplib#发送邮件
import os
#封装邮件内容
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
class mailsend():
    def sendHtml(self):
        #设置发送邮箱服务器
        smtpserver = "smtp.1000phone.com"
        #设置邮箱的用户名及密码,用于邮箱登录
        username = "xxx@1000phone.com"
        password = "xxx"
        #设置发送邮箱
        sender = "xxx@1000phone.com"
        #设置接收邮箱
        receiver = "xxx@qq.com"
        #设置邮箱主题
        subject = "自动化测试结果"
        #编写HTML类型的邮箱正文,及发送邮件的参数
        # content = "<html><h1>自动化测试结果文件,请查收</h1></html>"
        #通过读取html文件中的内容,然后发送

        content = open("./verydows电商/test_reports/2020-01-03-11-40-34.html","rb").read()
        msg = MIMEText(content,"html","utf-8")
        msg["Subject"]=subject
        msg["From"] = sender
        msg["To"]= receiver

        #创建一个邮件发送服务的对象
        smtp = smtplib.SMTP()
        #连接发件服务器
        smtp.connect(smtpserver)
        #登录发件邮箱
        smtp.login(username,password)
        #发送邮件
        smtp.sendmail(sender,receiver,msg.as_string())
        smtp.quit()


    def sendFujian(self,filename):
        #设置发送邮箱服务器
        smtpserver = "smtp.1000phone.com"
        #设置邮箱的用户名及密码,用于邮箱登录
        username = "xxx@1000phone.com"
        password = "xxx"
        #设置发送邮箱
        sender = "xxx@1000phone.com"
        #设置接收邮箱
        receiver = "yyy@qq.com"
        #设置邮箱主题
        subject = "xxxx自动化测试结果"
        #编写HTML类型的邮箱正文,及发送邮件的参数
        #content = "<html><h1>自动化测试结果文件,请查收</h1></html>"
        #通过读取html文件中的内容,然后发送
        # path = os.path.dirname(__file__)
        # path = os.path.dirname(path)
        path2 = os.path.dirname(os.path.dirname(__file__))+r"/test_reports/"
        path = path2+filename+".html"
        
        content = open(path,"rb").read()

        msg = MIMEText(content,"base64","utf-8")
        msg["Content-Type"]="application/octet-stream"
        msg['Content-Disposition'] = "attachment;filename='%s.html'" %filename

        msgRoot = MIMEMultipart('related')
        msgRoot["Subject"]=subject
        msgRoot["From"] = sender
        msgRoot["To"]= receiver
        msgRoot.attach(msg)

        #创建一个邮件发送服务的对象
        smtp = smtplib.SMTP()
        #连接发件服务器
        smtp.connect(smtpserver)
        #登录发件邮箱
        smtp.login(username,password)
        #发送邮件
        smtp.sendmail(sender,receiver,msgRoot.as_string())
        smtp.quit()

if __name__=="__main__":
    ssend = mailsend()
    ssend.sendHtml()

3、数据库处理模块
对数据库的增删改查操作,方便脚本中随时调用

import pymysql
from configparser import ConfigParser
#通过配置文件,重构下代码

class HandleMysql():
    def __init__(self):
        #创建对象
        conf = ConfigParser()
        #通过conf读入配置文件中的数据
        conf.read(r"./day04/mysql.conf")

    # 1.建立链接
        self.conn = pymysql.connect(host=conf.get("mysqld1","host"),   # mysql服务器ip或者域名
                            user=conf.get("mysqld1","username"),      # 用户名
                            password=conf.get("mysqld1","password"),     # 密码
                            db=conf.get("mysqld1","db"),   # 要链接的数据库名
                            port=conf.getint("mysqld1","port"),  # 数据库端口号,默认为3306
                            charset="utf8",   # 数据库编码为utf8,不能写为utf-8
                        # 默认返回的结果为元组或者嵌套元组的列表
                        # 可以指定cursorclass为DictCursor那么返回的结果为字典或者嵌套字典的列表
                            cursorclass=pymysql.cursors.DictCursor
                 )
        # 2.创建游标对象
        self.cursor = self.conn.cursor()
        
    def run(self, sql, args=None, is_more=False):
        # 3.使用游标对象,执行sql语句
        self.cursor.execute(sql, args)
        # 使用连接对象,提交
        self.conn.commit()
        # 4.获取执行的结果
        if is_more:
            # 返回获取执行的所有结果
            return self.cursor.fetchall()
        else:
            # 返回获取执行的单条结果
            return self.cursor.fetchone()
    def close(self):
        # 5.一定要关闭游标和连接
        # 先关闭游标对象,然后关闭连接对象,否则会报错
        self.cursor.close()
        self.conn.close()

if __name__ == "__main__":
    do_mysql = HandleMysql()
    # 查:查找表中所有信息
    sql_1 = "select * from dept"   
    # 删:删除表中所有记录
    # sql_2 = "delete from employee;"
    # 增:增加员工信息
    # sql_3 = "insert into employee (eid,ename,job,phone,manager,hiredate,salary,did) values(400011,'Zhangsan','销售员','18812345678',22,'2019-10-20','5500',102)"
    # 改:将所有员工薪水修改为5000元
    # sql_4 ="update employee set salary=5000;"
    print(do_mysql.run(sql_1,is_more=True))
    # print(do_mysql.run(sql_2))
    # print(do_mysql.run(sql_3))
    # print(do_mysql.run(sql_4))
    do_mysql.close
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值