Beispiel #1
0
class Control(WatchGuard):

    def __init__(self, user_product):
        super(Control, self).__init__(user_product)
        self.product_obj_list = []
        self.log = Log('control')

    def save_performance_data(self):
        """
            @summary 存储产品的performance数据
        :return:None
        """
        self.save_product_obj()
        # 遍历每个产品对象,获取所以的产品数据存以列表形式放在all_data中
        all_data = []
        for probj in self.product_obj_list:
            pf = probj.get_product_performance()
            all_data.append(pf)
        # 对all_data中的字典按照键值 Firewall Throughput 进行升排序,
        # 因为Firewall Throughput单位全部换算成以K为单位的数字,对应键值flag_number,
        # 所以这里以flag_number排序.
        all_data.sort(key=lambda x: x['flag_number'], reverse=False)
        title = []
        value = []
        for i, data in enumerate(all_data):
            temp = []
            for k, v in data.items():
                if not k == "flag_number":
                    if i == 0:
                        title.append(k)
                    temp.append(v)
            value.append(temp)
        # 调用view层进行写文件
        file_name = "..\\data\\performance.csv"
        visual = Visual(file_name)
        visual.write_to_csv(title, value)
        self.log.debug("存储产品performance数据完成, 结果在data文件下的performance.csv")

    def save_product_obj(self):
        """
            @summary 采用多线程获取存储产品对象【如果产品数量过多,则要限制多线程,防止服务器忙于过多请求,
                     具体限制数量根据网站性能和要求给出】
        :return:None
        """
        user_prd = self.choose_product()
        thread_list = []
        for prd in user_prd:
            name = prd['name']
            pid = prd['id']
            self.thread_action(name, pid)
            th = Thread(target=self.thread_action, args=(name, pid))
            thread_list.append(th)
        for thread in thread_list:
            thread.start()
        for thread in thread_list:
            thread.join(60)

    def thread_action(self, name, pid):
        prd = self.get_product_obj(name, pid)
        self.product_obj_list.append(prd)
Beispiel #2
0
class Visual(object):
    def __init__(self, file):
        self.file = file
        self.log = Log('')

    def write_to_csv(self, title, value):
        """
            @summary 将用户数据写入CSV文件
        :param title: [list] 标题
        :param value: [list] 写入的行数据列表
        :return:None
        """
        try:
            with open(self.file, 'w', newline="") as f:
                writer = csv.writer(f, dialect='excel')
                writer.writerow(title)
                writer.writerows(value)
        except IOError as e:
            self.log.error('写文件失败 %s' % str(e))
Beispiel #3
0
 def test_user_login_platUserAccount_null(self):
     '''登陆账户为空'''
     Log().info("开始执行测试用例test_user_login_platUserAccount_null")
     payload = '&request={"platUserAccount": "", "password": "******"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'F')
     self.assertEqual(testresult['errmsg'], '请求参数不完整:platUserAccount')
Beispiel #4
0
 def test_user_login_password_error(self):
     '''登陆密码错误'''
     Log().info("开始执行测试用例test_user_login_password_error")
     payload = '&request={"platUserAccount": "weizhaojg", "password": "******"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['loginMsg'], '密码错误')
Beispiel #5
0
 def test_user_login_loginPwd_toosmall(self):
     '''修改登录密码--新密码过短'''
     Log().info("开始执行测试用例test_user_login_loginPwd_toosmall")
     payload = '&request={"platUserId":"1609260937392541000000002","ologinPwd":"123456","loginPwd":"1"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['updateMsg'], '登录密码长度应在6-20位之间')
Beispiel #6
0
 def test_user_update_oldpassword_null(self):
     '''修改登录密码--空原始密码'''
     Log().info("开始执行测试用例test_user_login_platUserAccount_null")
     payload = '&request={"platUserId":"1609260937392541000000002","ologinPwd":"","loginPwd":"123456"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'F')
     self.assertEqual(testresult['errmsg'], '修改登录密码需要同时输入原密码和新密码')
Beispiel #7
0
 def test_user_update_password_null(self):
     '''修改登录密码--空原始密码新密码'''
     Log().info("开始执行测试用例test_user_update_password_null")
     payload = '&request={"platUserId":"1609260937392541000000002","ologinPwd":"","loginPwd":""}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['updateMsg'], '修改成功')
Beispiel #8
0
 def test_user_update_all_null(self):
     '''所有参数为空'''
     Log().info("开始执行测试用例test_user_login_all_null")
     payload = '&request={"platUserId":""}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'F')
     self.assertEqual(testresult['errmsg'], '请求参数不完整:platUserId')
Beispiel #9
0
 def test_order_create_success(self):
     '''创建订单成功'''
     Log().info("开始执行测试用例test_order_create_success")
     payload = '&request={"platUserId":""}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'F')
     self.assertEqual(testresult['errmsg'], '请求参数不完整:platUserId')
Beispiel #10
0
 def test_user_login_ologinPwd_error(self):
     '''修改登录密码--原始密码错误'''
     Log().info("开始执行测试用例test_user_login_ologinPwd_error")
     payload = '&request={"platUserId":"1609260937392541000000002",' \
               '"ologinPwd":"1234567","loginPwd":"123456"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['updateMsg'], '原登录密码错误')
Beispiel #11
0
def sendmail(file_new):
    logger = Log()
    mail_from = globalparam.mail_from_address
    mail_to = globalparam.mail_accept_address
    #定义正文
    f = open(file_new, 'rb')
    mail_body = f.read()
    f.close()
    msg = MIMEText(mail_body, _subtype='html', _charset='utf-8')
    #定义标题
    msg['Subject'] = u"RKYSB2G Interface Test Report"
    msg['From'] = mail_from
    msg['To'] = ''.join(mail_to)
    #定义发送时间(不定义的可能有的邮件客户端会不显示发送时间)
    msg['date'] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
    try:
        smtp = smtplib.SMTP()
        #连接SMTP服务器,此处用的163的SMTP服务器
        smtp.connect('smtp.163.com')
        #用户名密码
        smtp.login('*****@*****.**', 'zhyo123456789')
        smtp.sendmail(mail_from, mail_to, msg.as_string())
        smtp.quit()
        print('email has send out !')
        logger.info("发送邮件成功")
    except SMTPDataError:
        logger.error('发送邮件失败')
        raise
Beispiel #12
0
class WatchGuard(object):
    def __init__(self, user_product):
        self.compare_url = COMPARE_URL
        self.user_product = user_product
        self.log = Log('watchGuard')

    def choose_product(self):
        """
            @summary  获取指定的产品列表
        :return: data: [list] ,返回一个列表,其中元素是字典包含设备name和id
        """
        data = []
        page_text = connection.open_url(self.compare_url)
        soup = BeautifulSoup(page_text, 'lxml')
        select_tag = soup.find_all('select', attrs={'name': 'p1'})[0]
        optgroup = select_tag.find_all('optgroup')
        # 遍历下拉框选择Firebox M Series、Firebox T Series型号的设备id
        for group in optgroup:
            label = str(group.get('label').encode('utf-8'))
            if label in self.user_product:
                # 获取到该型号的option标签列表
                option_list = group.find_all('option')
                for opt in option_list:
                    name = str(opt.text.encode('utf-8'))
                    value = str(opt.get('value'))
                    data.append({'name': name, 'id': value})
        self.log.debug("选取用户特定产品型号完成")
        return data

    def get_product_obj(self, name, pid):
        """
            获取产品对象
        :return: Product 对象
        """
        url = COMPARE_URL + "/%s/%s/%s" % (pid, pid, pid)
        page = connection.open_url(url)
        prd = Product(name, page)
        short_name = name.split(' ')[-1]
        self.log.debug('%s 实例化产品对象完成' % short_name)
        return prd
Beispiel #13
0
 def test_user_login_password_success(self):
     '''登陆成功'''
     Log().info("开始执行测试用例test_user_login_password_error")
     payload = '&request={"platUserAccount": "weizhaojg", "password": "******"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     platuserid = testresult['responseData']['platUserId']
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['loginMsg'], '成功')
     self.assertEqual(platuserid, '1609260937392541000000002')
     self.assertEqual(testresult['responseData']['loginStatus'], 'T')
     return platuserid
Beispiel #14
0
 def test_flight_getinfo(self):
     '''航班查询接口'''
     Log().info("开始执行测试用例test_flight_getinfo")
     payload = '&request={"airline":"CA","departureTime":"2017-05-22 00:00:00",' \
               '"departurecity":"PEK",' \
               '"arrivecity":"CTU",' \
               '"bookreason":"1",' \
               '"PlatCompanyId":"1609260937392691000000003"}'
     url = self.base_url + payload
     r = requests.get(url)
     self.result = r.json()
     testresult = json.loads(self.result)
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['updateMsg'], '登录密码长度应在6-20位之间')
Beispiel #15
0
 def test_user_login_password_success(self):
     '''修改登录密码--修改成功'''
     Log().info("开始执行测试用例test_user_login_password_success")
     payload = '&request={"platUserId":"1609260937392541000000002",' \
               '"ologinPwd":"123456","loginPwd":"1234567"}'
     payloadreturn = '&request={"platUserId":"1609260937392541000000002",' \
               '"ologinPwd":"1234567","loginPwd":"123456"}'
     urltest = 'http://192.168.1.19:9984/openapi/getway?&service=user_login&partner=ca4e1e00b4a0400cbd20fd8d82076551&request={"platUserAccount": "weizhaojg", "password": "******"}&sign=543534534132132'
     url = self.base_url + payload
     urlreturn = self.base_url +payloadreturn
     requests.get(url)
     rtest = requests.get(urltest)
     self.result = rtest.json()
     testresult = json.loads(self.result)
     platuserid = testresult['responseData']['platUserId']
     self.assertEqual(testresult['issuccess'], 'T')
     self.assertEqual(testresult['responseData']['loginMsg'], '成功')
     self.assertEqual(platuserid, '1609260937392541000000002')
     self.assertEqual(testresult['responseData']['loginStatus'], 'T')
     requests.get(urlreturn)
def run():
    logger = Log()
    print(u"开始运行脚本:")
    logger.info(u"开始运行脚本:")
    if globalparam.isNeedCreateTestResult == 1:
        # test_data.init_data()  # 初始化接口测试数据
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        filename = './report/htmlreport/' + now + '_result.html'
        fp = open(filename, 'wb')
        runner = HTMLTestRunner(stream=fp,
                                title='RKYSB2G Interface Test Report',
                                description=u'用例执行情况')
        runner.run(discover)
        fp.close()
    else:
        print("不生成测试报告")
        unittest.main()
    Mailpost.sendreport()
    logger.info(u"运行完成退出~~~~~~~~~~~")
    print(u"运行完成退出~~~~~~~~~~~")
Beispiel #17
0
def sendreport():
    logger = Log()
    result_dir = './report/htmlreport/'
    lists = os.listdir(result_dir)
    lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\\" + fn)
               if not os.path.isdir(result_dir + "\\" + fn) else 0)
    print(u'最新测试生成的报告:' + lists[-1])
    if len(lists) > 2:
        print(u'待删除的报告' + lists[1])
        logger.info("开始删除测试报告" + lists[1])
        os.remove(result_dir + lists[1])
        if os.path.exists(result_dir + lists[1]) == False:
            logger.info("删除测试报告成功" + lists[1])
        else:
            logger.info("删除测试报告失败" + lists[1])
    else:
        logger.info("不需要删除测试报告")
    #找到最新生成的文件
    file_new = os.path.join(result_dir, lists[-1])
    print(file_new)
    if globalparam.isneedsendMail == 1:
        logger.info("获取是否发送邮件参数:为是~~是~~准备开始发送")
        #调用发邮件模块
        sendmail(file_new)
    else:
        logger.info("获取是否发送邮件参数:为否")
        print("不发送测试报告······")
Beispiel #18
0
 def __init__(self, user_product):
     self.compare_url = COMPARE_URL
     self.user_product = user_product
     self.log = Log('watchGuard')
Beispiel #19
0
# -*- coding:utf-8 -*-
from selenium import webdriver
import time, os, re, unittest
from src.common.log import Log
#导入日志模块 Log
log = Log()


def setup(self):
    #初始化登录
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30)
    self.base_url = "http://192.168.110.85:8095/"
    self.verificationErrors = []
    self.accept_next_alert = True


def login_successful(self):
    #登录后关闭企业管理页面
    driver = self.driver
    driver.maximize_window()
    time.sleep(1)
    driver.find_element_by_name('username').clear()
    time.sleep(1)
    driver.find_element_by_name('username').send_keys(u'孙兆富')
    time.sleep(1)
    driver.find_element_by_name('pwd').clear()
    time.sleep(1)
    driver.find_element_by_name('pwd').send_keys('admin123')
    time.sleep(1)
    driver.find_element_by_xpath(
Beispiel #20
0
 def __init__(self, file):
     self.file = file
     self.log = Log('')
Beispiel #21
0
# -*- coding:utf-8 -*-
"""
@author: jiangkai
@file:connection.py
@time:2018/06/03 16:49:28
"""
import requests
from src.common.log import Log
from src.common.myexception import RequestHostFailed

log = Log('connect')


def open_url(url):
    """
        @summary 根据指定的URL 获取网页内容
    :param url: [str] 网页url
    :return data: [str] 网页内容
    """
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
    try:
        res = requests.get(url, headers=header)
    except Exception as e:
        log.exception('连接被服务器强制断开,请重新尝试...[%s]' % str(e))
        raise RequestHostFailed('request请求被服务器强制断开')
    if res.status_code == 200:
        data = res.text
    else:
        data = ""
    return data
Beispiel #22
0
 def __init__(self, user_product):
     super(Control, self).__init__(user_product)
     self.product_obj_list = []
     self.log = Log('control')