def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost(rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode(parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener(urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode(get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def generator_const(days_num): ''' 此方法生成的是110105开头的当前年月日减去参数天数的随机身份证 :param days_num: 用来减的天数 :return: 生成的身份证字符串 ''' id = str(110105) da = date.today() + timedelta(days=days_num) id += da.strftime('%Y%m%d') id += str(random.randint(100, 300)) # ,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 check_code = {'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '5', '9': '3', '10': '2'} # 校验码映射 logger.debug(id) for i in range(0, len(id)): count += int(id[i]) * weight[i] id += check_code[str(count % 11)] # 算出校验码 return id
def test_tmp_func1(): logger.debug("测试1") print("测试2") assert tmp_func1(0) == 1
# -*- coding:utf-8 -*- ######################################################### # # 在文件目录下命令行执行py.test可直接执行所有带test开头的文件的测试,执行py.case -h可看帮助 # 执行py.case -k "first"只取params中的0,执行py.case -s则打印程序中的print() # 如果需要打日志则直接配置logging进行日志输出即可 # ######################################################### import sys import pytest from common.util.logger import logger sys.path.append("../") logger.debug("测试") # 被测函数 def tmp_func1(param1): result = param1 + 1 return result ######################################################### # # @pytest.fixture(scope=function,params=None,autouse=False,ids=None)装饰器 # scope是范围,有四个选项function (default), class , module , session,一般选择默认即可。 # params。参数,程序中通过“形参.param”获得并使用 # autouse是配置项,如果不打算把装饰后的函数放到测试用例函数的形参中,这个值设置为True,则所有的函数都会引用。实际使用中 # 大多需要把装饰后的函数放到测试用例函数的形参中,故一般使用默认值False。 # ids是params对应的key,命令行执行测试时可以指定执行,使用-k。
def output_with_excel(self, template_file, sheet_count, data_list): ''' :param template_file: 模板文件路径 :param sheet_count: 模板文件容sheet的个数,比如5个sheet页通过这个参数可以指定就用3个 :param data_list: 数据list,其中包含sheet页list,表头list,数据list 本方法中均使用list进行数据操作,由于模板中第一行为标题,故插入数据的行数索引从1开始 ''' try: data = xlrd.open_workbook(template_file) sheet_name = data.sheet_names() sheet_list = list() # 将模板文件sheet对象存入sheet_list列表 for i in range(sheet_count): sheet_list.append(data.sheets()[i]) template_data_list = list() # 将模板文件每个sheet的数据list存入tempLate_data_list列表 for i_sheet in sheet_list: template_data_list.append(i_sheet.row_values(0)) output_file = xlwt.Workbook() # 字体设定 font = xlwt.Font() font.bold = True # 边框设定 borders = xlwt.Borders() borders.left = 1 borders.right = 1 borders.top = 1 borders.bottom = 1 # 背景色设定 backcolor = xlwt.Pattern() backcolor.pattern = xlwt.Pattern.SOLID_PATTERN backcolor.pattern_fore_colour = 5 style = xlwt.XFStyle() style.font = font style.borders = borders style.pattern = backcolor output_file_sheet_list = list() # 输出文件添加sheet并给予标题,对象存入output_file_sheet_list列表 for j in range(sheet_count): output_file_sheet_list.append( output_file.add_sheet(sheet_name[j], cell_overwrite_ok=True)) # j_sheet_num为sheet页的索引 for j_sheet_num in range(len(sheet_list)): # j_sheet_row_index为模板文件template_dataList的索引 for j_sheet_row_index in range( len(template_data_list[j_sheet_num])): output_file_sheet_list[j_sheet_num].write( 0, j_sheet_row_index, template_data_list[j_sheet_num][j_sheet_row_index], style) # 数据格式为{"sheet页数":{"列数":[当前添加的数据1,当前添加的数据2]}} filter_dict = dict() logger.debug("++++++++++++++++++++++++++++++") logger.debug(data_list) # 以追加方式添加数据 for data_num in range(len(data_list[0])): logger.debug(data_num) logger.debug(data_list) # 当前sheet的索引 data_sheet_num = int(data_list[0][data_num]) - 1 data_row_num = 1 data_col_num = int(data_list[1][data_num]) - 1 logger.debug("===================================") logger.debug(data_sheet_num) logger.debug(data_col_num) # 判断当前sheet页数是否在filter_dict中,即当前sheet是否曾经出现过 if str(data_sheet_num) not in filter_dict: # 当前sheet页数不存在filter_dict,添加对应data_sheet_num字典 filter_dict[str(data_sheet_num)] = {} # 增加对应列数的数据list filter_dict[str(data_sheet_num)][str( data_col_num)] = list() # 由于sheet页数第一次出现,故数据也一定第一次出现,所以之列列表中添加值 filter_dict[str(data_sheet_num)][str(data_col_num)].append( data_col_num) else: # 当前sheet页数存在filter_dict中,判断当前列数是否在列数字典中,即当前列数是否出现过 if str(data_col_num) not in filter_dict[str( data_sheet_num)]: # 当前列数未出现过,添加列表 filter_dict[str(data_sheet_num)][str( data_col_num)] = list() # 向列数字典列表插数据,但插入数据的当前行数为初始值,即1 filter_dict[str(data_sheet_num)][str( data_col_num)].append(data_col_num) else: # 当前列数出现过。向列数字典列表插数据,插入数据的当前行数为总出现的次数 filter_dict[str(data_sheet_num)][str( data_col_num)].append(data_col_num) data_row_num = len(filter_dict[str(data_sheet_num)][ str(data_col_num)]) logger.debug(filter_dict) data_preview_add = data_list[2][data_num] # 向excel中插入数据 output_file_sheet_list[data_sheet_num].write( data_row_num, data_col_num, data_preview_add) output_file.save(str(TimeStamp.time_stamp()) + ".xls") except: logger.exception("发现错误")
def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[ ('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') ]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost( rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode( parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener( urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode( get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def test_access_success_protocol(ytdyc_mobile_fixture_protocol): opener = ytdyc_mobile_fixture_protocol html = opener.open(Ytdyc.TEST_URL.value) logger.debug(html.read()) time.sleep(3)