接口测试学习-python第六课(异常处理/网络编程)
一、异常处理
在平时的代码运行中,经常遇到报错的情况,一旦报错,整个代码都会被迫中止。如果代码中包含一些必须结束的代码,就会因为程序的出错中断而无法结束。比如打开一个文件后是需要关闭的,链接数据库后是需要关闭链接的,可是如果中途代码出错,这些关闭操作就不会被运行。
为了解决这种情况,可以用try将可能出错的代码包裹起来,并判断这段代码是否有异常,并根据判断结果执行接下来的操作。此时即使代码出错,也不会停止运行。
1 first = input('输入被除数:') 2 second = input('输入除数:') 3 try: # 用try将可能出错的代码包起来 4 first = int(first) 5 second = int(second) 6 res = first / second 7 except ValueError as e: # 这个e代表错误信息,如果上面两行代码出现了ValueError这个错误信息就提示出错 8 print(e) 9 print('出错了') 10 except ZeroDivisionError as e: # 如果出现了‘ZeroDivisionError’这个错误信息也进行提示 11 print(e) 12 print('除数不能为0') 13 except Exception as e: # 可以捕捉到所有的异常情况 14 print(e) 15 print('出错了') 16 else: # 没有异常的时候 17 print('没错') 18 finally: # 不管是否出错都会执行finally 19 print('我是finally')
二、网络编程-接口测试
平时接口测试时一般借助postman和jmeter等工具,根据接口文档设定的url,入参和必填数据等进行测试。但是用python也可以进行简单的接口测试。python中有两个模块可以进行接口测试,分别是urllib和requests。第一个模块进行接口测试代码比较复杂,在此只简单介绍一下其进行get请求和post请求时如何操作。
1、urllib模块进行接口测试
1 from urllib import request,parse 2 import json 3 url = 'http://www.cnblogs.com/myyard777' # 地址必须以url开头 4 req = request.urlopen(url) # 打开一个url 5 content = req.read().decode() 6 # 网络爬虫就是从其他的网站上获取一些有用的内容 7 fw = open('interweb.html','w',encoding='utf-8') 8 fw.write(content) 9 10 通过这个模块完成get请求 11 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=*******' 12 req = request.urlopen(url) 13 content = req.read().decode() 14 res_dic = json.loads(content) 15 if res_dic.get('error_code') == 0: 16 print('测试通过') 17 else: 18 print('测试失败') 19 20 发post请求 21 url = 'http://api.*****.cn/api/user/login' 22 # data请求数据 23 data = { 24 'username':'*****', 25 'passwd':'********' 26 } 27 data = parse.urlencode(data) # 自动将参数拼好xx=xxx&**=*** 28 req = request.urlopen(url, data.encode()) # 必须将data变成二进制数据 29 print(req.read().decode())
2、requests模块进行接口测试
1 import requests 2 # 使用这个模块发送get请求 3 url = 'http://api.nnzhp.cn/api/user/stu_info' 4 data = {'stu_name': '小黑'} # 请求数据 5 req = requests.get(url, params=data) # 发送get请求 6 print(req.json()) # 返回字典 7 print(req.text) # 返回string类型的json串 8 9 # 使用这个模块发post请求 10 url = 'http://api.nnzhp.cn/api/user/login' 11 data = {'username': 'niuhanyang', 'passwd': 'aA123456'} 12 req = requests.post(url, data) # 发送post请求 13 print(req.json()) 14 15 # 入参是json类型的 16 import random 17 url = 'http://api.nnzhp.cn/api/user/add_stu' 18 phone = random.randint(10000000000, 99999999999) # 产生一个随机的电话号码 19 data ={ 20 "name": "xyz", 21 "grade": "天蝎座", 22 "phone": phone, 23 "sex": "男", 24 "age": 28, 25 "addr": "河南省济源市北海大道32号" 26 } 27 req = requests.post(url, json=data) 28 print(req.json()) 29 30 # 需要添加cookie的请求 31 url = 'http://api.nnzhp.cn/api/user/gold_add' 32 data = {'stu_id': 468, 'gold': 100} 33 cookie = {'niuhanyang': '337ca4cc825302b3a8791ac7f9dc4bc6'} 34 req = requests.post(url, data, cookies=cookie) 35 print(req.json()) 36 37 # 添加header的请求 38 url = 'http://api.nnzhp.cn/api/user/all_stu' 39 header = {'Referer': 'http://api.nnzhp.cn/'} 40 req = requests.get(url, headers=header) 41 print(req.json()) 42 43 # 上传文件 44 url = 'http://api.nnzhp.cn/api/file/file_upload' 45 # data = {'file': open('test.txt', encoding='utf-8')} # 如果上传的是图片,需要以'rb'模式打开 46 data = {'file': open(r'C:\Users\john\Downloads\工作\图片\测试\1.jpg', 'rb')} 47 req = requests.post(url, files=data) 48 print(req.json()) 49 50 # 下载图片(也可以下载音乐,修改url和存储格式即可) 51 url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg' 52 res = requests.get(url) 53 print(res.content) # 返回的是一个二进制内容 54 fw = open('s.jpg', 'wb') 55 fw.write(res.content)