jsonpath
xlwt

以下实践来自某微信小程序面试题

准备工作


怎么抓小程序的包

首先要解决的就是证书的问题:

  1. 安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统的证书
  2. 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信只会信任系统提供的证书
  3. 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任自己配置的证书列表

显然,安卓 7.0 以下的系统或者微信 7.0 以下版本
我这里选用用的模拟器 6.0 的版本,为了保险起见,装的是微信 6.7.3 版本
怎么下载微信的老版本呢?可以到「应用汇」之类的app上下载到

面试题提取


通过上面的准备工作,不出意外,可以顺利抓包了。先分析接口请求和响应,抓包信息(关键信息如下):

页面不多的话,可直接用小程序自动化测试的方式拿到所有请求和响应并保存为 har 格式文件

更多关于小程序自动化测试可参看小程序自动化测试

def data_process(data):
    with open(data, 'rb') as f:
        f_str = f.read()
    lemon_json = json.loads(f_str)
    entries_len = len(lemon_json['log']['entries'])
    data = []
    for i in range(0, entries_len):
        json_expr_topic = '$.log.entries[{}].response.content.text'.format(i)
        topic = jsonpath.jsonpath(lemon_json, json_expr_topic)
        try:
            json_expr_subject_content = '$.data.stems[*].content'
            subject_content = jsonpath.jsonpath(json.loads(topic[0]), json_expr_subject_content)

            json_expr_content = '$.data.stems[*].items[0].content'
            content = jsonpath.jsonpath(json.loads(topic[0]), json_expr_content)

            json_expr_answer = '$.data.stems[*].items[0].answer'
            answer = jsonpath.jsonpath(json.loads(topic[0]), json_expr_answer)
            if subject_content and content and answer:
                for subject in list(zip(subject_content, content, answer)):
                    data.append(subject)
        except:
            pass
    return data

知识点:jsonpath 提取关键信息

面试题存入 excel


def save_to_excel(data, save_name):
    file = xlwt.Workbook()
    table = file.add_sheet('data')
    row_title = [u'题干', u'问题', u'答案']
    for i in range(0, len(row_title)):
        table.write(0, i, row_title[i], set_style('Times new Roman', 220, True))
    for i, p in enumerate(data):
        for j, q in enumerate(p):
            # print(i + 1, j, q)
            table.write(i + 1, j, q)
    file.save(save_name)
# 表格格式设置
def set_style(name, height, bold=False):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    pat = xlwt.Pattern()
    pat.pattern = xlwt.Pattern.SOLID_PATTERN
    pat.pattern_fore_colour = 5
    font.name = name
    font.bold = bold
    font.colour_index = 2
    font.height = height
    style.font = font
    style.pattern = pat
    return style

知识点:xlwt 库存入数据到 excel

其他


获取完整面试题,可关注我的公众号 CodeMonkeyJerry,后台回复 “面试题” 获取。