def login(self, address, account, password): # 访问路径 path = self.url + address # 要排序参数 params = { "account": account, "password": password, "timestamp": self.timestamp } # 参数按键盘排序,排序后加密 sign = Base().md5(Base().sort(params)) # 请求参数加上sign params["sign"] = sign # 请求接口 self.r = requests.post(url=path, data=params) # 保存token self.token = self.r.json()["data"]["token"] # 保存userId self.userId = self.r.json()["data"]["userId"] # cookies self.Cookie = {} self.Cookie["Cookie"] = self.r.headers.get("Set-Cookie") if self.r.json()["resultCode"] == 200: print("【请求成功】:你很棒 \n【接口地址】:%s \n【请求结果】:%s" % (address, self.r.json())) else: print("【请求异常】:请检查 \n【接口地址】:%s \n【报错信息】:%s" % (address, self.r.text)) return False
def updateAgentStatus(self, agentId): ''' 更新金额 :return: ''' # 登录 token_url = Base().api_baseurl() + "/api/login" token_headers = {'Content-Type': 'application/json'} userRq = {"account": "admin", "password": "******"} token_r = requests.post(token_url, data=json.dumps(userRq), headers=token_headers) api_token = token_r.json()['data']['userToken']['token'] # 更新余额 url = Base().api_baseurl() + "/api/management/agent/updateAgentStatus" headers = { 'Authorization': api_token, 'Content-Type': 'application/json' } rq = { "agentIds": agentId, "price": 500000, } r = requests.post(url, data=json.dumps(rq), headers=headers) print(r.json())
def test_01(self): """ 限价卖\买:while(余额足够){A创建卖单,B买入}, 全部成交 手续费 == 2/1000 交易对:BTC/USDT A卖单等差递增 UserA_SellOrderPrice = 98 UserA_SellOrderNum = 1,2,3,4,5 B买单价格 UserB_BuyOrderPrice = 100 UserB_BuyOrderNum= 15 """ # 清除redis,mysql中btc/usdt的买卖单数据 ConnectRedis().clear_redis(name=["1buy", "1sell"]) ConnectMysql().update_order_status(transtion_id=1, order_type=1, order_status=2) ConnectMysql().update_order_status(transtion_id=1, order_type=2, order_status=2) self.test_buyer = Base(user="******") self.test_seller = Base(user="******") logger.info("测试用例说明:".format(TestCase.setUp.__doc__)) # 下单前查询买卖双发的主币和目标币余额 self.before_deal_seller_main_balance_value = self.test_seller.User_balance_details(currency_id=1) self.before_deal_seller_deputy_balance_value = self.test_seller.User_balance_details(currency_id=2) self.before_deal_buyer_main_balance_value = self.test_buyer.User_balance_details(currency_id=1) self.before_deal_buyer_deputy_balance_value = self.test_buyer.User_balance_details(currency_id=2) logger.info("买入之前买家主币余额:{0}-----买入之前买家目标币余额:{1}".format(self.before_deal_buyer_main_balance_value, self.before_deal_buyer_deputy_balance_value)) logger.info("买入之前卖家的主币余额:{0}------买入之前卖家的目标币余额{1}".format(self.before_deal_seller_main_balance_value, self.before_deal_seller_deputy_balance_value)) self.buy_price, self.sell_price = 100, 98 self.buy_num = 15 self.sell_num = [1, 2, 3, 4, 5] self.sell_id_list = [] for i in range(len(self.sell_num)): self.sell_resp = self.test_seller.SellOrder(transtion_id=1, price=self.sell_price, num=self.sell_num[i], order_type=0) self.sell_order_id = JMESPathExtractor().extract(query="OBJECT.sellerOrderId", body=self.sell_resp.text) self.sell_id_list.append(self.sell_order_id) time.sleep(1) logger.info("下卖单返回信息:{0}".format(self.sell_resp.json())) self.buy_resp = self.test_buyer.OrderReservations(transtion_id=1, price=self.buy_price, num=self.buy_num, order_type=0) buy_order_id = JMESPathExtractor().extract(query="OBJECT.buyerOrderId", body=self.buy_resp.text) logger.info("下买单返回信息:{0}".format(self.buy_resp.json())) for i in self.sell_id_list: order_status = ConnectMysql().get_Order_Status(order_id=i, order_type=2) logger.info("卖单Id:{0}----订单状态:{1}".format(i, order_status)) logger.info("买单ID:{0}----订单状态:{1}".format(buy_order_id, ConnectMysql().get_Order_Status(order_id=buy_order_id, order_type=1))) self.after_deal_seller_main_balance_value = self.test_seller.User_balance_details(currency_id=1) self.after_deal_seller_deputy_balance_value = self.test_seller.User_balance_details(currency_id=2) self.after_deal_buyer_main_balance_value = self.test_buyer.User_balance_details(currency_id=1) self.after_deal_buyer_deputy_balance_value = self.test_buyer.User_balance_details(currency_id=2) logger.info("买入之后买家主币余额:{0}-------买入之后买家目标币余额:{1}".format(self.after_deal_buyer_main_balance_value, self.after_deal_buyer_deputy_balance_value)) logger.info("买入之后卖家主币余额:{0}------买入之后卖家目标币余额:{1}".format(self.after_deal_seller_main_balance_value, self.after_deal_seller_deputy_balance_value)) logger.info("成交金额:{0}".format(self.buy_num*self.sell_price))
def auditApartmentContract(): """删除核出租合同终止结算""" try: base = Base() base.open(page.contractEndPage, apartmentContractEndPage.searchMould['tr_contract_end'], havaFrame=False) contractNum = get_conf('apartmentContractInfo', 'contractnum') sql = "SELECT * from apartment_contract where contract_num = '%s' and deleted = 0 and contract_status != 'EFFECTIVE'" % contractNum.encode( 'utf-8') if sqlbase.get_count(sql) > 0: base.input_text( apartmentContractEndPage.searchMould['contract_num_loc'], contractNum) else: consoleLog(u'未找到出租合同终止结算的测试数据,跳过删除用例', level='w') return base.click(apartmentContractEndPage.searchMould['search_button_loc']) base.staleness_of( apartmentContractEndPage.searchMould['tr_contract_end']) base.click( apartmentContractEndPage.addContractEndMould['delete_button']) base.click(apartmentContractEndPage. addContractEndMould['delete_button_confirm']) base.check_submit() consoleLog(u'出租合同 %s 终止结算删除成功' % contractNum) finally: base.driver.quit()
def __init__(self, driver): self.driver = driver self.base = Base(driver) #定位登录 self.loc_username = ('id', 'account') self.loc_paswd = ("name", "password") self.loc_login = ("id", "submit") #定位添加BUG self.test_link = ('xpath', ".//*[@id='mainmenu']/ul/li[4]/a") self.bug_link = ('xpath', ".//*[@id='modulemenu']/ul/li[2]/a") self.add_bug = ('link text', '提Bug') self.bug_title = ('id', 'title') self.body = ('class name', 'article-content') self.save = ('id', 'submit') self.version = ('xpath', ".//*[@id='openedBuild_chosen']/ul") self.trunk = ('xpath', ".//*[@id='openedBuild_chosen']/div/ul/li") self.buglist = ('xpath', ".//*[@id='bugList']/tbody/tr[1]/td[4]/a") self.bug_init_title = '测试用例标题' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #用sendkey的方法上传文件的参数 self.uploadfile = ("class name", "fileControl") #用pykeyboard方法上传文件的参数 点击操作步骤上的图片按钮,点击后再点击浏览 self.upload = ( "xpath", ".//*[@id='dataform']/table/tbody/tr[6]/td/div[2]/div[1]/span[18]/span" ) self.liulan = ("css selector", ".ke-inline-block.ke-upload-button") self.confirm = ("css selector", ".ke-button-common.ke-button-outer.ke-dialog-yes")
def addHouseContact(): """审核委托合同""" try: base=Base() base.open(page.entrustContractPage, houseContractPage.contractSearchMould['tr_contract'], havaFrame=False) #配置文件读取委托合同信息 contractNum = get_conf('houseContractInfo', 'contractNum');if contractNum!=None:consoleLog(u'配置文件中获得委托合同编号:%s'%contractNum) sql = "SELECT audit_status from house_contract where contract_num = '%s' and deleted = 0" % contractNum.encode('utf-8') if sqlbase.get_count(sql) > 0: if sqlbase.serach(sql)[0] == 'AUDIT': pass else: base.input_text(houseContractPage.houseSearchMould['status'], 'AUDIT')#待审核 base.click(houseContractPage.contractSearchMould['search_button_loc']) base.staleness_of(houseContractPage.contractSearchMould['tr_contract']) contractNum = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"contract_num\"] > div').text();return a", True).decode('utf-8') consoleLog(u'使用随机委托合同:%s 做审核操作' % contractNum, level='w') else: base.input_text(houseContractPage.houseSearchMould['status'], 'AUDIT') base.click(houseContractPage.contractSearchMould['search_button_loc']) base.staleness_of(houseContractPage.contractSearchMould['tr_contract']) contractNum = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"contract_num\"] > div').text();return a", True).decode( 'utf-8') consoleLog(u'使用随机委托合同:%s 做审核操作' % contractNum, level='w') base.input_text(houseContractPage.houseSearchMould['status'], '') base.input_text(houseContractPage.contractSearchMould['contract_num_loc'], contractNum);consoleLog(u'实际审核委托合同编号:%s' % contractNum) base.click(houseContractPage.contractSearchMould['search_button_loc']) base.staleness_of(houseContractPage.contractSearchMould['tr_contract']) base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage.addHouseContractMould['contract_num_loc']) # 驳回 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) base.script('$("button[status=\'REJECTED\']")[1].click()') base.input_text(houseContractPage.addHouseContractMould['contract_audit_content'], u'自动化测试审核数据') base.click(houseContractPage.addHouseContractMould['contract_audit_confirm']) base.staleness_of(houseContractPage.contractSearchMould['tr_contract']) base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage.addHouseContractMould['contract_num_loc']) # 审核租金 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=1) base.click(houseContractPage.addHouseContractMould['rent_detail_selectAll']) base.click(houseContractPage.addHouseContractMould['rent_audit_loc']) base.click(houseContractPage.addHouseContractMould['audit_pass_loc']) base.click(houseContractPage.addHouseContractMould['rent_audit_confirm']) # 初审 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) base.script('$("button[status=\'PASS\']")[2].click()') base.click(houseContractPage.addHouseContractMould['contract_audit_confirm']) base.staleness_of(houseContractPage.contractSearchMould['tr_contract']) base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage.addHouseContractMould['contract_num_loc']) # 复审 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) base.script('$("button[status=\'APPROVED\']")[1].click()') base.click(houseContractPage.addHouseContractMould['contract_audit_confirm']) base.check_submit() consoleLog(u'委托合同:%s 审核成功' % contractNum) finally: base.driver.quit()
def test_goods_comment(self): """商品评论""" allure.attach("点击我的", "进入个人中心") # 进入我的 PersonalPage(self.driver).personal_click() time.sleep(1) # 选择待评价 PersonalPage(self.driver).comment_click() # 选择待评价的订单 allure.attach("进入待评价", "选择待评价订单") OrderShowPage(self.driver).order_click() # 输入评价 text = "陌上花开,缓缓归矣!" CommentPage(self.driver).inpute_content(text) time.sleep(2) # 选择星星等级 CommentPage(self.driver).click_start() # 点击提交 CommentPage(self.driver).submitc_click() time.sleep(1) allure.attach("评论成功", "获取toast") # 获取toast文本 toast = self.driver.find_element_by_xpath("//*[contains(@text,'成功')]") text = toast.text # 断言 if text == "评论成功": assert 1 else: Base(self.driver).screenshot("../screenshot/comment.png") assert 0
def __call__(self, conns): self.base = Base() self.financial_data = conns['financial_data'] year = self.base.gettoday()[:4] #Shibor拆放利率 shibor_data = ts.shibor_data(year) print(shibor_data) self.base.batchwri(shibor_data, 'shibor_data', self.financial_data) #银行报价数据 shibor_quote_date = ts.shibor_quote_data(year) self.base.batchwri(shibor_quote_date, 'shibor_quote_data', self.financial_data) #Shibor均值数据 shibor_ma_data = ts.shibor_ma_data(year) self.base.batchwri(shibor_ma_data, 'shibor_ma_data', self.financial_data) #贷款基础利率(LPR) lpr_data = ts.lpr_data(year) self.base.batchwri(lpr_data, 'lpr_data', self.financial_data) #LPR均值数据 lpr_ma_data = ts.lpr_ma_data(year) self.base.batchwri(lpr_ma_data, 'lpr_ma_data', self.financial_data)
def login(driver,user="******",psw="123456"): "普通登录函数" zen = Base(driver) driver.get(url) zen.sendKeys(loc1,user) zen.sendKeys(loc2,psw) zen.click(loc3)
def test_1003(): """出租合同起算日小于委托合同签约日""" # describe:出租合同承租起算日不在委托合同周期内,合同签约失败 # data:出租合同起算日小于委托合同签约日 # result:签约失败 fileName = 'apartmentContract_1003' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' " \ "AND hc.deleted = 0 AND hc.contract_status = 'EFFECTIVE'WHERE a.deleted = 0 AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT'" \ "AND hc.apartment_type='BRAND'AND hc.sign_date>date_sub(date(sysdate()), interval 6 month) and not EXISTS (select * from apartment_contract ac,apartment_contract_relation acr " \ "where ac.contract_id=acr.contract_id and a.apartment_id=acr.apartment_id) and EXISTS (select * from query_apartment qa where qa.apartment_code=a.apartment_code) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] consoleLog(u'%s:使用房源 %s 签约出租合同' % (fileName, apartmentCode)) with Base() as base: base.open(page.customerListPage, apartmentContractPage.customerSignMould['tr_customer']) try: base.find_element(By.ID, 'search_btn').click() base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) # 搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a')) # 可能会有分配租客的弹窗出现,此为关闭 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True) # 获取第一条数据编号 base.input_text(apartmentContractPage.customerSignMould['search_customer_name_loc'], customerCode) base.click(apartmentContractPage.customerSignMould['search_button_loc']) base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) base.script("$('button#edit_btn')[2].click()") # 点击列表页第一行的签约 base.click(apartmentContractPage.customerSignMould['share']) # 点合租 base.input_text(apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click(apartmentContractPage.customerSignMould['house_search_btn']) base.staleness_of(apartmentContractPage.customerSignMould['apartment_loc']) try: base.dblclick(apartmentContractPage.customerSignMould['apartment_loc'], checkLoc=apartmentContractPage.addApartmentContractMould[ 'contract_num_loc']) # 对查询结果的第一条房源数据双击发起签约 except: base.click(apartmentContractPage.customerSignMould['newsign_button_loc']) # 新签 contractNum = 'AutoTest' + '-' + time.strftime('%m%d%H%M%S') # 定义合同编号 randomHouseContract = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_sub(date(sysdate()), interval 6 month) " "from house_contract where contract_num = '%s'" % info[2]) # 获取房源合同时间元素 base.input_text(apartmentContractPage.addApartmentContractMould['contract_num_loc'], contractNum) # 合同编号 base.type_date(apartmentContractPage.typeMould['sign_date'], randomHouseContract[4]) # 签约日期 base.type_date(apartmentContractPage.typeMould['rent_start_date'], randomHouseContract[4]) # 承租起算日 base.type_date(apartmentContractPage.typeMould['rent_end_date'], randomHouseContract[2]) # 承租到期日 time.sleep(3) message = base.script("var a = $('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) if message is not None: messagehope = u'承租开始日期没到委托合同开始日' base.diffAssert(lambda test: asserts(message).is_equal_to(messagehope), 1003, u'%s:出租合同 %s 新增提交异常,期望值 %s 实际值 %s' % (fileName, contractNum, messagehope, message)) else: consoleLog(u'%s:页面信息获取失败' % fileName, 'e')
def addResidential(): """删除楼盘""" try: mybase = Base() mybase.open(page.residentiaPage, residentiaPage.searchResidentialModule['search_btn'], havaFrame=False);consoleLog(u'打开JSP页面') # mybase.open(Page.residentiaPage, (By.ID, 'search_btn'), havaFrame=False) sql = 'select residential_name from residential where residential_name like "AutoTest-%" and deleted<>1' ResidentiaName = sqlbase.serach(sql)[0];consoleLog(u'查询结果:%s' % ResidentiaName) # ResidentiaName='AutoTest-0706-103107' mybase.input_text((By.CSS_SELECTOR, "#residential_name"), ResidentiaName,event=u'输入楼盘名称:')\ # ;consoleLog(u'输入楼盘名称') mybase.click((By.ID, 'search_btn'));consoleLog(u'点击查找') mybase.staleness_of(residentiaPage.searchResidentialModule['tr_residential']);consoleLog(u'等待数据刷新') mybase.click((By.CSS_SELECTOR, '#residential + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(17) > div > button:nth-child(5)'));consoleLog(u'点击删除') # 点击删除 mybase.click((By.CSS_SELECTOR, 'div>a>span>span'),1);consoleLog(u'确定删除') # 点击确定 mybase.click((By.ID, 'search_btn'));consoleLog(u'再次查找') # 再次查找 try: WebDriverWait(mybase.driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#residential + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(11) ')), u'未找确定楼盘 %s 信息' % ResidentiaName) raise Exception(u'楼盘 %s 信息存在,删除失败'%ResidentiaName) except u'未找确定楼盘 %s 信息' % ResidentiaName: consoleLog(u'楼盘删除成功') finally: mybase.driver.quit()
def addHouseContact(): """审核委托合同""" try: base = Base() base.open(page.entrustContractPage, houseContractPage.contractSearchMould['tr_contract'], havaFrame=False) #配置文件读取合同编号 contractNum = get_conf('houseContractInfo', 'contractNum') sql = "SELECT * from house_contract WHERE contract_num = '%s' and deleted = 0" % contractNum.encode( 'utf-8') if sqlbase.get_count(sql) != 0: base.input_text( houseContractPage.contractSearchMould['contract_num_loc'], contractNum) base.click( houseContractPage.contractSearchMould['search_button_loc']) base.staleness_of( houseContractPage.contractSearchMould['tr_contract']) base.click( houseContractPage.addHouseContractMould['delete_button']) base.click(houseContractPage. addHouseContractMould['delete_button_confirm']) base.check_submit() consoleLog(u'委托合同删除成功') else: consoleLog(u'未找到委托合同 %s,略过删除功能' % contractNum) finally: base.driver.quit()
def setUpClass(cls, username="******", password="******"): cls.driver = webdriver.Chrome() cls.driver.maximize_window() cls.driver.get("https://192.168.50.65") cls.b = Base(cls.driver) loca = ("xpath", ".//*[@id='main']/div/div/div[2]/form/div[2]/div/div/input") cls.b.send(loca, username) loca2 = ("xpath", ".//*[@id='main']/div/div/div[2]/form/div[3]/div/div/input") cls.b.send(loca2, password) time.sleep(5) loca3 = ("xpath", ".//*[@id='main']/div/div/div[2]/form/div[5]/div/button") cls.b.click(loca3) time.sleep(3) loca4 = ("xpath", ".//*[@id='main']/div/div[1]/div/div[2]/div/ul/li[2]/div[1]") cls.b.move(loca4) time.sleep(1) loca5 = ( "xpath", ".//*[@id='main']/div/div[1]/div/div[2]/div/ul/li[2]/div[2]/ul/li[1]" ) cls.b.click(loca5)
def test_1105(): """已终止委托做终止结算""" # describe:委托合同已终止,再做中直接算会提示不可终止 # data:1.合同已终止 # result:1. 终止结算提交失败 fileName = 'apartmentContract_1105' contractSql = "select contract_num from house_contract hc where EXISTS (select * from house_contract_end hce where hce.contract_id=hc.contract_id and hce.deleted=0) " \ "and deleted=0 and city_code=330100 and contract_id not in (select hc.contract_id from apartment a,apartment_contract ac,house_contract hc where hc.contract_id=a.house_contract_id " \ "and a.house_id=ac.house_id and ac.real_due_date>NOW())order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机已终止委托合同 %s 做终止结算' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage.searchMould['contract_search_button_loc']) # 搜索 base.staleness_of(houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click(houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 time.sleep(1) message = base.script( "var a = $('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) # 获取提示信息 messagehope = u'该委托合同已结算过' base.diffAssert(lambda test: asserts(message).is_equal_to(messagehope),1105, u'%s:委托合同 %s 终止结算异常,期望值 %s 实际值 %s' % (fileName, contractNum, messagehope, message))
def setUpClass(cls): cls.driver = webdriver.Chrome() cls.driver.get('http://www.baidu.com') cls.a = Base(cls.driver) cls.log = Log() cls.driver.maximize_window() cls.windows = cls.driver.current_window_handle
def test_1073(): """出租合同3个页面的保存调用同一个接口,但是参数不一致,检测接口是否正常""" with Base() as base: contractNum = sqlbase.serach( "select contract_num from query_apartment_contract where audit_status = 'AUDIT' and city_code = '330100' and contract_status = 'EFFECTIVE' " "and entrust_type = 'SHARE' order by rand() limit 1") base.open( page.apartmentContractPage, apartmentContractPage.searchContractMould['contract_num_loc']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], contractNum) base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.dblclick(apartmentContractPage.searchContractMould['tr_contract'], checkLoc=apartmentContractPage.saveBtn) for i in range(3): base.click(apartmentContractPage.editTab, index=i + 2) # base.click(apartmentContractPage.saveBtn,index=i) base.wait_element(apartmentContractPage.saveBtn) base.driver.find_elements( By.CSS_SELECTOR, '.search-button-wrapper #form_save')[i].click() try: base.check_submit() except TimeoutException: base.diffAssert(lambda t: asserts('1').contains('2'), 1073, u'合同详情第 %s 个tab页无法保存' % str(i + 1))
def test_1110(): """委托终止结算已审核删除""" # describe:委托终止结算已审核的删除失败 # data:1、委托终止结算已审核 # result:1、删除失败 fileName = 'apartmentContract_1110' contractSql = "select hc.contract_num from house_contract_end hce,house_contract hc where hc.contract_id=hce.contract_id and hce.deleted=0 and hce.audit_status='REVIEW' " \ "and hc.city_code=330100 order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取合同 %s 终止结算做审核' % (fileName, contractNum)) with Base() as base: # 删除终止结算 base.open(page.contractEndPage, houseContractEndPage.searchMould['contract_search_button_loc']) base.click(houseContractEndPage.addContractEndMould['tab_info'], index=1) base.input_text(houseContractEndPage.searchMould['end_contract_num_loc'], contractNum) base.click(houseContractEndPage.searchMould['end_search_button_loc']) base.staleness_of(houseContractEndPage.searchMould['tr_contract_end']) base.click(houseContractEndPage.addContractEndMould['delete_button']) base.click(houseContractEndPage.addContractEndMould['delete_button_confirm']) time.sleep(1) message = base.script( "var a = $('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) # 获取提示信息 messagehope = u'终止结算已审核,不可删除' base.diffAssert(lambda test: asserts(message).contains(messagehope),1110, u'%s:委托合同 %s 终止结算异常,期望值 %s 实际值 %s' % (fileName, contractNum, messagehope, message))
def test_add_address(driver_init): """测试添加收货地址的正确性""" add = Add_address(driver_init) # 点击收货管理 add.click_address() # 点击右上角添加地址按钮 add.click_add_button() # 输入收货人姓名 consignee = "王五" add.input_consignee(consignee) # 输入电话号码 mobile = "13312341234" add.input_mobile(mobile) # 输入邮政编码 postal = "610000" add.input_postal(postal) # 点击所在地区 add.click_region() # 点击国家 add.click_country() # 点击省 base = Base(driver_init) base.swipe_up() add.click_province() # 点击市 add.click_city() # 点击区 add.click_area() # 输入详细地址 detailed_address = "天府新区" add.input_detailed_address(detailed_address) # 点击添加地址按钮 add.click_add_buttons() assert True
def auditDefaultAchievement(): """审核违约业绩""" try: base = Base() base.open( page.apartmentAchievementPage, apartmentDefaultAchievementPage.searchContractMould['tr_contract'], havaFrame=False) contractnum = 'WB1-0067404' base.input_text(apartmentDefaultAchievementPage. searchContractMould['contract_num_loc'], contractnum.encode('utf-8')) #输入合同号 base.click(apartmentDefaultAchievementPage. searchContractMould['search_button_loc']) #查找 base.staleness_of(apartmentDefaultAchievementPage. searchContractMould['tr_contract']) #等待第一条数据刷新 base.dblclick( apartmentDefaultAchievementPage.searchContractMould['tr_contract'], apartmentDefaultAchievementPage. detailDefaultMoudle['house_code_loc']) #点击第一条数据 #数据校验 base.click(apartmentDefaultAchievementPage. detailDefaultMoudle['audit_button_loc']) #审核 base.input_text(apartmentDefaultAchievementPage. detailAchievementMoudle['contract_audit_content'], u'自动化测试审核意见') #审核意见 base.click(apartmentDefaultAchievementPage. detailAchievementMoudle['contract_audit_confirm']) #确定 base.check_submit() #等待提交完成 finally: base.driver.quit()
def test_1007(): """租合同周期在跟前合同的周期重叠""" # describe:租合同周期在跟前合同的周期重叠,提示时间段被占用 # data:有过出租合同且当前状态为待租的房源,新增出租合同时间在前合同的承租周期内 # result:合同创建失败 fileName = 'apartmentContract_1007' searchSql = "SELECT a.apartment_code,hc.contract_num,ac.contract_num,date_sub(date(ac.real_due_date), interval 2 DAY) FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE'" \ "INNER JOIN apartment_contract_relation acr on a.apartment_id=acr.apartment_id INNER JOIN apartment_contract ac on ac.contract_id=acr.contract_id and ac.deleted=0 " \ "WHERE a.apartment_id=acr.apartment_id and a.deleted = 0 AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT' order by rand() limit 1" if sqlbase.get_count(searchSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % searchSql) return info = sqlbase.serach(searchSql) apartmentCode = info[0] consoleLog(u'%s:取随机房源 %s 做签约' %(fileName, apartmentCode)) signDate = info[3] with Base() as base: base.open(page.customerListPage, apartmentContractPage.customerSignMould['tr_customer']) try: base.find_element(By.ID, 'search_btn').click() base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) # 搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a')) # 可能会有分配租客的弹窗出现,此为关闭 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True).decode('utf-8') # 获取第一条数据编号 base.input_text(apartmentContractPage.customerSignMould['search_customer_name_loc'], customerCode) base.click(apartmentContractPage.customerSignMould['search_button_loc']) base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) base.script("$('button#edit_btn')[2].click()") # 点击列表页第一行的签约 consoleLog(u'使用房源 %s 签约出租合同' % apartmentCode) base.click(apartmentContractPage.customerSignMould['share']) # 点合租 base.input_text(apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click(apartmentContractPage.customerSignMould['house_search_btn']) base.staleness_of(apartmentContractPage.customerSignMould['apartment_loc']) base.dblclick(apartmentContractPage.customerSignMould['apartment_loc']) # 对查询结果的第一条房源数据双击发起签约 base.click(apartmentContractPage.customerSignMould['newsign_button_loc']) # 新签 contractNum = 'AutoTest' + '-' + time.strftime('%m%d%H%M%S') # 定义合同编号 randomHouseContract = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()) from house_contract where contract_num = '%s'" % info[1]) # 获取房源合同时间元素 base.input_text(apartmentContractPage.addApartmentContractMould['contract_num_loc'], contractNum) # 合同编号 base.type_date(apartmentContractPage.typeMould['sign_date'], signDate) # 签约日期 base.type_date(apartmentContractPage.typeMould['rent_start_date'], signDate) # 承租起算日 base.type_date(apartmentContractPage.typeMould['rent_end_date'], randomHouseContract[1]) # 承租到期日 time.sleep(3) message = base.script( "var a = $('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) if message != '': messagehope = u'该时间段被合同号%s占用' % info[2] base.diffAssert(lambda test: asserts(message).is_equal_to(messagehope), 1007, u'%s:页面信息提示不正确,期望值 %s 实际值 %s' % (fileName, messagehope, message)) else: consoleLog(u'页面信息获取失败', 'e') return
def __init__(self,driver): self.driver = driver self.base = Base(self.driver) #定位用户名元素的参数 self.loc_user = ("id","txtUserName") #定位密码元素的参数 self.loc_pwd = ("id","txtPassWord") #定位登录按钮元素的参数 self.button = ("id","btnSubmit") #首页导航菜单中的“涉访管理”按钮元素 self.loc_sfgl = ("css selector",".nav-feifang-n>a>cite>p") #涉访审批管理菜单元素 self.loc_spgl = ("link text","涉访审批管理") #“撤管待审批”菜单元素 self.loc_cgdsp = ("link text","撤管待审批") # 只能用JS来定位到“审批按钮” self.appr_butn = '''document.getElementsByTagName('iframe')[2].contentWindow.document.body. getElementsByClassName('layui-table-body')[1].getElementsByClassName('layui-btn')[0].click()''' #审批结果:选择同意或不同意,index为1是同意,为0是不同意 self.appr_result = '''document.getElementsByTagName('iframe')[3].contentWindow.document.body. getElementsByTagName('fieldset')[1].getElementsByClassName('layui-anim')[1].click()''' #审批意见框 self.appr_idea = '''document.getElementsByTagName('iframe')[3].contentWindow.document. body.getElementsByTagName('fieldset')[1].getElementsByClassName('layui-textarea')[0].value=("可以")''' #提交审批按钮 self.appr_submit = '''document.getElementsByTagName('iframe')[3].contentWindow.document. getElementById("spButton").click()''' #审批“操作成功”提示 self.submit_tips = ("css selector",".layui-layer-content.layui-layer-padding")
def _enterPage(driver, host): ''' 进入某个页面 ''' Base(driver) driver.get(host + "/adviser/index/main") driver.maximize_window()
def test(): """出租合同续签超过可续签日期""" # describe:检出租合同续签超过可续签日期,不可签约 # data:1.合同应收款项全部已审;2.承租到期日>委托合同到期日+延长期 # result:续签合同失败 contractSql = "SELECT ac.contract_num,cp.urgent_customer_name,cp.customer_name from apartment_contract ac inner join customer_person cp on ac.person_id=cp.person_id " \ "where ac.deleted = 0 and ac.city_code = '330100' and ac.entrust_type='SHARE' and ac.audit_status = 'AUDIT' and ac.contract_status = 'EFFECTIVE' " \ "and ac.deleted=0 and payment_type='NORMAL' ORDER BY RAND() LIMIT 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'SQL查无数据!', level='w') consoleLog(u'执行SQL:%s' % contractSql.encode('utf-8')) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'取随机合同 %s 做续签' % contractNum) with Base() as base: base.open(page.apartmentContractPage, apartmentContractPage.searchContractMould['tr_contract']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], contractNum) base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.click( (apartmentContractPage.searchContractMould['resign_loc'])) # 续签
def __call__(self, conns): self.base = Base() self.finacial_data = conns['financial_data'] #清空表 # self.finacial_data.dopost('TRUNCATE TABLE dapan_hangqing_date') # self.finacial_data.dopost('TRUNCATE TABLE dapan_code_name') # 实时行情 hangqing = ts.get_index() today = self.base.gettoday() hangqing['date'] = today.replace('/', '-') #大盘指数每日行情数据 self.base.batchwri(hangqing, 'dapan_hangqing_date', self.finacial_data) #大盘代码-名字对照表 self.base.batchwri(hangqing[['code', 'name']], 'dapan_code_name', self.finacial_data) #大盘代码-名字对照表去重 duizhao = self.finacial_data.getdata('dapan_code_name') # print(duizhao.size) duizhao_qc = duizhao.drop_duplicates().sort_values( by='code').reset_index(drop=True) # print(df) self.finacial_data.dopost('TRUNCATE TABLE dapan_code_name') self.base.batchwri(duizhao_qc, 'dapan_code_name', self.finacial_data)
def test_1123(): """正退不生成扣回业绩""" # describe:出租合同正退终止结算生成扣回业绩,记录同步到预估业绩排行榜 # data:1、出租合同状态为有效;2、出租合同审核状态为已复审;3、应收扣回金大于0;4、应收转租费大于0 # result:1、合同状态变为正退;2、不生成扣回业绩; fileName = 'apartmentAchievement_1123' contractSql = "SELECT contract_num,rent_end_date,date(sysdate()) from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' and rent_end_date>DATE_ADD(date(SYSDATE()),INTERVAL 1 MONTH)order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做正退终止' % (fileName, contractNum)) with Base() as base: breach_money = '888.88' # 应收违约金 zhuanzu_money = '666.66' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text(apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编 base.click(apartmentContractEndPage.addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage.addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc']) # 立即终止 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.input_text(apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_date(apartmentContractEndPage.typeMould['end_date'], info[1]) # 终止日期:承租到期日 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'RETREATING') # 正退 base.input_text(apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'承租周期已完') # 终止原因 base.type_select(apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text(apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys(apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage.addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick(apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage.addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick(apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text(apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.input_text(apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage.addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 contractEndAdd = "SELECT ace.end_contract_num FROM apartment_contract ac,apartment_contract_end ace WHERE ac.contract_id = ace.contract_id " \ "and ace.audit_status='NO_AUDIT' AND ace.end_type='RETREATING'and ace.deleted=0 and ac.contract_num='%s'" % contractNum base.diffAssert(lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true(), 1123, u'%s:出租合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 合同状态检查 contractStatus = sqlbase.serach( "select contract_status from apartment_contract where deleted = 0 and contract_num='%s' " % contractNum)[0] base.diffAssert(lambda test: asserts(contractStatus).is_equal_to('RETREATING'), 1123, u'%s:出租合同 %s 终止结算后状态异常异常,期望值 RETREATING 实际值 %s' % (fileName, contractNum, contractStatus)) # 扣回业绩检查 time.sleep(10) # 业绩生成有时间延迟,这里等待10秒 backAchievementSql = "select is_active,achieve_id,accounting_time from back_achievement where contract_num='%s' and deleted=0 " % contractNum base.diffAssert(lambda test: asserts(sqlbase.get_count(backAchievementSql)).is_equal_to(0), 1123, u'%s:出租合同 %s 正退终止有扣回业绩生成,业务异常' % (fileName, contractNum))
def _login(driver, host, user="******", psw="123456"): '''普通登录函数''' zen = Base(driver) driver.get(host + "/zentao/user-login-L3plbnRhby8=.html") zen.sendKeys(loc1, user) zen.sendKeys(loc2, psw) zen.click(loc3) time.sleep(2)
def _login(driver, host, user='******', psw='123456'): '''普通登录函数''' ximopanda = Base(driver) driver.get(host) ximopanda.sendKeys(loc1, user) ximopanda.sendKeys(loc2, psw) ximopanda.click(loc3) time.sleep(2)
def postNoData(self, address, params): # 访问路径 path = self.url + address # 登录返回参数 # 参数按键盘排序,排序后MD5加密 sign = Base().md5(Base().sort(params)) # 加上sign params["sign"] = sign # 请求方式 self.r = requests.post(url=path, data=params, headers=self.Cookie) if self.r.json()["resultCode"] == 200: print("【请求成功】:你很棒 \n【接口地址】:%s \n【请求结果】:%s" % (address, self.r.json())) else: print("【请求异常】:请检查 \n【接口地址】:%s \n【报错信息】:%s" % (address, self.r.text)) return False
def test_1005(): """未定价房源签约""" # describe:房源签完委托合同未定价,合同签约失败 # data:未定价的房源 # result:签约失败 fileName = 'apartmentContract_1005' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' inner join query_apartment qa on qa.apartment_code=a.apartment_code " \ "WHERE a.deleted = 0 AND a.rent_price IS NULL AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT'ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] consoleLog(u'%s:使用房源 %s 签约出租合同' % (fileName, apartmentCode)) with Base() as base: base.open(page.customerListPage, apartmentContractPage.customerSignMould['tr_customer']) try: base.find_element(By.ID, 'search_btn').click() base.staleness_of(apartmentContractPage. customerSignMould['tr_customer']) # 搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a' )) # 可能会有分配租客的弹窗出现,此为关闭 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True) # 获取第一条数据编号 base.input_text( apartmentContractPage. customerSignMould['search_customer_name_loc'], customerCode) base.click( apartmentContractPage.customerSignMould['search_button_loc']) base.staleness_of( apartmentContractPage.customerSignMould['tr_customer']) base.script("$('button#edit_btn')[2].click()") # 点击列表页第一行的签约 base.click(apartmentContractPage.customerSignMould['share']) # 点合租 base.input_text( apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click(apartmentContractPage.customerSignMould['house_search_btn']) base.staleness_of( apartmentContractPage.customerSignMould['apartment_loc']) base.dblclick(apartmentContractPage.customerSignMould['apartment_loc'] ) # 对查询结果的第一条房源数据双击发起签约 time.sleep(1) message = base.script( "var a = $('.bootstrap-growl.alert.alert-info.alert-dismissible').text();return a", True) messsagehope = u'房源未定价,找房源方' base.diffAssert(lambda test: asserts(message).contains(messsagehope), 1005, u'%s:未定价房源 %s 签约异常' % (fileName, apartmentCode))
def _login_result(driver,_text): ''' 登录成功后,获取当前页面的用户名,判断用户名 ''' imooc = Base(driver) imooc.move(loc_move) time.sleep(2) r = imooc.is_text_in_element(loc_re,_text) return r