示例#1
0
    def run_main(self, run_case_type=None):
        #系统版本
        plat = platform.system()
        plat_ver = platform.version()
        log.info("plat_ver = %s" % plat_ver)

        #根据参数 获取测试套件
        if run_case_type == '2':
            ts = self.get_case_suit()
        elif run_case_type == '1' or run_case_type == None:
            ts = self.get_all_testcase()
        else:
            log.info("用例范围参数错误,应该为空,1,2")
        report_name = self.set_report_name()
        # 打开report.html文件
        fp = open(report_name, "wb")
        #执行用例
        runner = HTMLTestRunner(fp,
                                title="WEBUI自动化测试报告",
                                description="环境:%s %s   浏览器:%s" %
                                (plat, plat_ver, sys.argv[1]))
        result = runner.run(ts)

        option = "%s_success_count" % sys.argv[1]
        self.write_ini_file("count", option, result.success_count)

        option = "%s_failure_count" % sys.argv[1]
        self.write_ini_file("count", option, result.failure_count)

        option = "%s_error_count" % sys.argv[1]
        self.write_ini_file("count", option, result.error_count)
        #关闭文件句柄
        fp.close()
示例#2
0
def get_value(key, defValue=None):
    """ 获得一个全局变量,不存在则返回默认值 """
    try:
        log.info("key = %s,value=%s" % (key, _global_dict[key]))
        return _global_dict[key]
    except:
        KeyError
示例#3
0
 def get_login_success_element(self):
     flag = False
     element = self.find_element(
         "xpath", '//*[@id="app"]/div/div[1]/div/div[2]/div/div/div[2]')
     log.info("element = %s" % element)
     if element != None:
         self.get_screenshot()
         flag = True
     return flag
示例#4
0
 def get_username_or_password_error(self):
     flag = False
     error_element = self.find_element("xpath", '/html/body/div[2]/p')
     log.info("error_element = %s" % error_element)
     log.info("error_element.text= %s" % error_element.text)
     if error_element.text == "用户密码错误":
         self.get_screenshot()
         flag = True
     return flag
示例#5
0
 def get_all_row_data(self):
     nrows = self.get_row_count()
     log.info("nrows=%s" % nrows)
     data = []
     for row in range(1, nrows):
         row_data = self.get_row_value(row)
         data.append(row_data)
     log.info("data=%s" % data)
     return data
示例#6
0
 def get_input_usr_tips(self):
     flag = False
     error_element = self.find_element(
         "xpath", '//*[@id="app"]/div/form/div[2]/div[2]/div/div[2]')
     log.info("error_element = %s" % error_element)
     log.info("error_element.text= %s" % error_element.text)
     if error_element.text == "请输入用户名":
         self.get_screenshot()
         flag = True
     return flag
示例#7
0
 def open_login_page(self, broswer_type=None):
     self.cf = GetConfigData()
     #获取config文件中的url
     self.link = self.cf.get_data("test_env", "url")
     #打开浏览器
     driver = self.open_broswer(broswer_type)
     #拼接指定页面的url
     url = self.link + "#/login"
     #打开指定页面
     self.open_url(driver, url)
     log.info("open url=%s" % url)
示例#8
0
 def test_1(self,username,password):
     self.lp.login(username,password)
     log.info(unittest.TestCase.id(self).split(".")[2].split("___")[0])
     #根据每个用例设定断言
     #第一个用例 登录成功
     if unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_1_1":
         result = self.lp.get_login_success_element()
         self.assertTrue(result)
     # 第二个用例 登录失败,提示用户名密码错误
     elif unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_1_2":
         error = self.lp.get_username_or_password_error()
         self.assertTrue(error)
示例#9
0
 def get_screenshot(self):
     #获取调用该函数的函数名
     func_name = traceback.extract_stack()[-2][2]
     day = get_cur_date()
     #截图文件路径
     dir = os.path.join(get_project_dir(), "ScreenShot", day, sys.argv[1])
     if not os.path.exists(dir):
         os.makedirs(dir)
     else:
         log.info("%s 文件夹已存在" % dir)
     #截图文件命名 调用函数+日期.png
     filename = dir + "\\" + func_name + "_" + get_cur_date() + ".png"
     log.info("filename=%s" % filename)
     self.driver.save_screenshot(filename)
示例#10
0
    def send_mail(self,report_name,success_case_count,failure_case_count):
        #获取mail的配置信息
        self.get_mail_config()
        #创建一个带附件的实例
        message = MIMEMultipart()
        subject = " WEBUI自动化测试结果"
        message['Subject']=subject
        message['from']=self.from_addr
        message['to'] = self.to_addrs

        #邮件正文内容
        total_case_count = success_case_count + failure_case_count
        context = "共测试%d个用例,成功%d个,失败%d个。\n具体测试结果见附件。"%(total_case_count,success_case_count,failure_case_count)
        message.attach(MIMEText(context))

        #构造附件1
        att1 = MIMEText(open(report_name,"rb").read(),"base64","utf-8")
        send_file_name = report_name.split("/")[-1]
        log.info("send_file_name=%s"%send_file_name)
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] = 'attachment; filename="%s"'%send_file_name
        message.attach(att1)

        try:
            self.st = smtplib.SMTP()
            self.st.connect(host=self.mail_host)
            log.info("self.mail_usr=%s,self.mail_psw=%s"%(self.mail_usr,self.mail_psw))
            self.st.login(self.mail_usr,self.mail_psw)
            self.st.sendmail(self.from_addr,self.to_addrs.split(";"), message.as_string())
            log.info("send email success")
        except:
            log.info("send email fail")
示例#11
0
 def find_element(self, by, locator):
     try:
         if by == "id":
             log.info("by=%s,locator=%s" % (by, locator))
             wait = WebDriverWait(self.driver, 10, 1)
             lt = (By.ID, locator)
             wait.until(ec.visibility_of_element_located(lt))
             element = self.driver.find_element_by_id(locator)
         elif by == "xpath":
             log.info("by=%s,locator=%s" % (by, locator))
             wait = WebDriverWait(self.driver, 10, 1)
             lt = (By.XPATH, locator)
             wait.until(ec.visibility_of_element_located(lt))
             element = self.driver.find_element_by_xpath(locator)
     except:
         element = None
     return element
示例#12
0
 def open_broswer(self, broswer_type=None):
     #未传浏览器类型,默认打开谷歌浏览器
     if broswer_type == None:
         driver = webdriver.Chrome()
     else:
         #打开谷歌浏览器
         if broswer_type == 'chrome':
             driver = webdriver.Chrome()
         # 打开火狐浏览器
         elif broswer_type == 'firefox':
             driver = webdriver.Firefox()
         # 打开IE浏览器
         elif broswer_type == 'ie':
             driver = webdriver.Ie()
         else:
             # 参数错误,提示不支持
             log.info("not support broswer type")
     driver.maximize_window()
     self.driver = driver
     return driver
示例#13
0
    def get_case_suit(self):
        #定义测试套件
        test_suit = unittest.TestSuite()
        #获取case_list设定的用例
        case_list = self.get_case_list()
        #获取测试用例路径
        dir_name = os.path.abspath(os.path.dirname(os.getcwd()))
        test_case_dir = os.path.join(dir_name, "TestCase")
        log.info("test_case_dir=%s" % test_case_dir)
        st = []
        #查找出case_list中设定的用例文件
        for case in case_list:
            discover = unittest.defaultTestLoader.discover(test_case_dir, case)
            st.append(discover)
        # 把case_list设定的用例文件中的测试用例添加到测试套件中
        for suit in st:
            for test_name in suit:
                test_suit.addTest(test_name)

        return test_suit
示例#14
0
    def test_2(self, username, password):
        self.lp.login(username, password)
        log.info(unittest.TestCase.id(self).split(".")[2].split("___")[0])
        # 根据每个用例设定断言
        # 第一个用例 登录成功
        if unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_2_1":
            result = self.lp.get_login_success_element()
            self.assertTrue(result)
        # 第二个用例 登录失败,提示用户名密码错误
        elif unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_2_2":
            error = self.lp.get_username_or_password_error()
            self.assertTrue(error)

        # 第三个用例 登录失败,提示请输入密码
        elif unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_2_3":
            error = self.lp.get_input_psw_tips()
            self.assertTrue(error)

        # 第四个用例 登录失败,提示请输入用户名
        elif unittest.TestCase.id(self).split(".")[2].split("___")[0] == "test_2_4":
            error = self.lp.get_input_usr_tips()
            self.assertTrue(error)
示例#15
0
 def get_yaml_data(self, filename=None):
     if filename == None:
         filename = get_project_dir() + "\\YamlFile" + "\\test.yaml"
     log.info("filename=%s" % filename)
     fp = open(filename, encoding='utf-8')
     yaml_data = yaml.load(fp, Loader=yaml.FullLoader)
     log.info("yaml_data=%s" % yaml_data)
     log.info("yaml_data=%s" % yaml_data['test_env']['url'])
示例#16
0
 def set_report_name(self):
     broswer_type = sys.argv[1]
     day = datetime.now().strftime("%Y%m%d")
     case_name = os.path.basename(__file__).split(".")[0]
     # dir_name = os.path.abspath(os.path.dirname(os.getcwd())) + "\\Report"
     dir_name = os.path.join(os.path.abspath(os.path.dirname(os.getcwd())),
                             "Report", day)
     log.info("dir_name=%s" % dir_name)
     file_exist = os.path.exists(dir_name)
     log.info("file_exist=%s" % file_exist)
     if not file_exist:
         os.makedirs(dir_name)
     else:
         log.info("dir_name = %s文件夹已存在" % dir_name)
     file_name = "report_" + case_name + "_" + day + "(" + broswer_type + ")" + ".html"
     report_name = os.path.join(dir_name, file_name)
     log.info("report_name = %s" % report_name)
     return report_name
示例#17
0
class RunMain(unittest.TestCase):
    #获取所有测试用例
    def get_all_testcase(self):
        dir_name = os.path.abspath(os.path.dirname(os.getcwd()))
        test_case_dir = os.path.join(dir_name, "TestCase")
        log.info("test_case_dir=%s" % test_case_dir)
        ts = unittest.defaultTestLoader.discover(test_case_dir, "*Test.py")
        return ts

    def set_report_name(self):
        broswer_type = sys.argv[1]
        day = datetime.now().strftime("%Y%m%d")
        case_name = os.path.basename(__file__).split(".")[0]
        # dir_name = os.path.abspath(os.path.dirname(os.getcwd())) + "\\Report"
        dir_name = os.path.join(os.path.abspath(os.path.dirname(os.getcwd())),
                                "Report", day)
        log.info("dir_name=%s" % dir_name)
        file_exist = os.path.exists(dir_name)
        log.info("file_exist=%s" % file_exist)
        if not file_exist:
            os.makedirs(dir_name)
        else:
            log.info("dir_name = %s文件夹已存在" % dir_name)
        file_name = "report_" + case_name + "_" + day + "(" + broswer_type + ")" + ".html"
        report_name = os.path.join(dir_name, file_name)
        log.info("report_name = %s" % report_name)
        return report_name

    #获取case_list.txt中设定的用例
    def get_case_list(self):
        cur_dir = os.path.os.getcwd()
        file_name = os.path.join(cur_dir, "case_list.txt")
        fp = open(file_name)
        case_list = []
        for case in fp.readlines():
            log.info("case=%s" % case)
            if case != '' and not case.startswith("#"):
                case_list.append(case.replace("\n", ""))
        log.info("case_list=%s", case_list)
        fp.close()
        return case_list
示例#18
0
        result = runner.run(ts)

        option = "%s_success_count" % sys.argv[1]
        self.write_ini_file("count", option, result.success_count)

        option = "%s_failure_count" % sys.argv[1]
        self.write_ini_file("count", option, result.failure_count)

        option = "%s_error_count" % sys.argv[1]
        self.write_ini_file("count", option, result.error_count)
        #关闭文件句柄
        fp.close()

    #写data.ini文件
    def write_ini_file(self, section, option, value):
        filename = os.path.join(get_project_dir(), "ConfigFile", "data.ini")
        cf = GetConfigData(filename)

        cf.add_setion(section)
        cf.add_option(section, option, str(value))
        cf.write_ini()


if __name__ == '__main__':
    if len(sys.argv) == 3:
        RunMain().run_main(sys.argv[2])
    elif len(sys.argv) == 2:
        RunMain().run_main()
    else:
        log.info("参数个数错误")
示例#19
0
 def view_report(self):
     try:
         #点击查看报告/查看按钮
         self.click_element(
             "xpath",
             '//*[@id ="app"]/div/div[3]/div[2]/div[1]/div[1]/div[1]/div[3]/button/span'
         )
         log.info("click view_report btn")
         self.click_element(
             "xpath",
             '//*[@id="app"]/div/div[3]/div[2]/div[1]/div[1]/div[2]/table/tr[1]/td[5]/button/span'
         )
         log.info("click view  btn")
         #获取当前窗口句柄
         cur_handle = self.lp.driver.current_window_handle
         log.info("cur_handle=%s" % cur_handle)
         # 获取所有窗口句柄
         handles = self.lp.driver.window_handles
         log.info("handles=%s" % handles)
         # 切换到新的报告查看页面
         for handle in handles:
             if handle != cur_handle:
                 self.lp.driver.switch_to.window(handle)
         cur_handle = self.lp.driver.current_window_handle
         log.info("cur_handle2=%s" % cur_handle)
         #查找新标签页上的元素
         element = self.find_element(
             "xpath", '//*[@id="publicOpinionAlert"]/div[1]')
         log.info("element=%s" % element)
     except:
         log.info("can not find element")
示例#20
0
 def get_page_company_count(self):
     element = self.find_element("xpath",
                                 '//*[@id="app"]/div/div[3]/div[1]')
     count = element.text.split(" ")[1]
     log.info("count=%s" % count)
     return int(count)
示例#21
0
 def get_db_company_count(self):
     db = GetDBData()
     sql = "select count(distinct company_id) from b_rpt_report r where  r.report_type='1';"
     data = db.select_db(sql)
     log.info("db data=%s" % data)
     return int(data[0][0])
示例#22
0
 def test_3(self):
     self.lp.login("nbyh_admin","123456")
     result = self.lp.get_login_success_element()
     log.info("result = %s"%result)
     self.assertTrue(result)
示例#23
0
 def setUpClass(cls):
     cls.sp = SearchPage()
     broswer_type = sys.argv[1]
     log.info("broswer_type=%s" % broswer_type)
     cls.sp.open_search_page(broswer_type)
     cls.driver = cls.sp.driver
示例#24
0
 def setUp(self):
     broswer_type = sys.argv[1]
     log.info("broswer_type=%s" % broswer_type)
     self.lp = LoginPage()
     self.lp.open_login_page(broswer_type)
示例#25
0
        self.lp.login("nbyh_admin","123456")
        result = self.lp.get_login_success_element()
        log.info("result = %s"%result)
        self.assertTrue(result)


if __name__ == '__main__':
    # unittest.main()
    ts = unittest.TestSuite()
    #添加用例
    ts.addTest(LoginTest("test_3"))
    # 添加所有用例
    case_dir_name = os.path.abspath(os.path.dirname(os.getcwd())) + "/TestCase"
    discover = unittest.defaultTestLoader.discover(case_dir_name,"LoginTest.py")
    #获取当前日期
    # day = datetime.now().strftime("%Y%m%d_%H%M%S")
    day = datetime.now().strftime("%Y%m%d")
    #获取用例名称,去掉.py
    case_name = os.path.basename(__file__).split(".")[0]
    dir_name = os.path.abspath(os.path.dirname(os.getcwd())) +"/Report"
    file_name = "report_" + case_name +"_"+  day+".html"
    report_name = os.path.join(dir_name,file_name)
    log.info("report_name = %s"%report_name)
    #打开report.html文件
    fp = open(report_name,"wb")
    runner =  HTMLTestRunner(fp)
    # runner.run(ts)
    runner.run(discover)
    fp.close()

示例#26
0
 def get_all_testcase(self):
     dir_name = os.path.abspath(os.path.dirname(os.getcwd()))
     test_case_dir = os.path.join(dir_name, "TestCase")
     log.info("test_case_dir=%s" % test_case_dir)
     ts = unittest.defaultTestLoader.discover(test_case_dir, "*Test.py")
     return ts
示例#27
0
 def get_pj_dir(self):
     pj_dir = os.path.abspath(os.path.dirname(os.getcwd()))
     log.info("pj_dir = %s" % pj_dir)
     return pj_dir
示例#28
0
 def get_row_count(self):
     nrows = self.sheet.nrows
     log.info("nrows=%s" % nrows)
     return nrows
示例#29
0
    #获取所有行数据
    def get_all_row_data(self):
        nrows = self.get_row_count()
        log.info("nrows=%s" % nrows)
        data = []
        for row in range(1, nrows):
            row_data = self.get_row_value(row)
            data.append(row_data)
        log.info("data=%s" % data)
        return data

    #指定单元格写入数据
    def write_data(self, row, col, value):
        old_excel = self.rd
        new_excel = copy(old_excel)
        sheet = new_excel.get_sheet(0)
        sheet.write(row, col, value)
        new_excel.save(self.excel_file_name)


if __name__ == '__main__':
    ed = GetExcelData()
    ed.open_excel_file()
    ed.get_row_count()
    data = ed.get_cell_value(1, 1)
    log.info("data=%s" % (data))
    log.info("get_row_value=%s" % (ed.get_row_value(1)))
    log.info("get_col_value=%s" % (ed.get_col_value(1)))
    ed.write_data(1, 3, "write test")
    ed.get_all_row_data()
示例#30
0
 def test_search_all_company(self):
     self.sp.click_search_button()
     page_company_count = self.sp.get_page_company_count()
     db_company_count = self.sp.get_db_company_count()
     log.info("page_company_count=%s,db_company_count=%s"%(page_company_count,db_company_count))
     self.assertEqual(page_company_count,db_company_count)