下载地址:https://www.pan38.com/share.php?code=pvvmX 提取码:8888 【仅供学习参考】
HTTP协议基础
HTTP是无状态的应用层协议,基于请求-响应模型。常见请求方法包括GET、POST等。
Python请求库
requests是Python中最流行的HTTP库,提供了简洁的API。
自动化测试
Selenium是常用的Web自动化测试工具,可以模拟用户操作。
import requests
from time import sleep
from random import uniform
from urllib.parse import urlencode
import json
class HttpRequestDemo:
def init(self):
self.session = requests.Session()
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'application/json',
}
def make_get_request(self, url, params=None):
"""模拟GET请求"""
try:
sleep(uniform(0.5, 1.5)) # 随机延迟
response = self.session.get(
url,
params=params,
headers=self.headers,
timeout=10
)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"请求失败: {e}")
return None
def make_post_request(self, url, data=None):
"""模拟POST请求"""
try:
sleep(uniform(1.0, 2.0))
response = self.session.post(
url,
data=json.dumps(data),
headers={**self.headers, 'Content-Type': 'application/json'},
timeout=15
)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"请求失败: {e}")
return None
def demo_http_flow(self):
"""演示完整HTTP流程"""
print("=== 开始HTTP请求演示 ===")
# 示例GET请求
print("\n发送GET请求...")
get_response = self.make_get_request(
"https://httpbin.org/get",
params={"test": "value"}
)
print(f"GET响应: {get_response}")
# 示例POST请求
print("\n发送POST请求...")
post_response = self.make_post_request(
"https://httpbin.org/post",
data={"key": "value"}
)
print(f"POST响应: {post_response}")
print("\n=== 演示结束 ===")
if name == "main":
demo = HttpRequestDemo()
demo.demo_http_flow()
selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
class BrowserAutomationDemo:
def init(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def demo_basic_navigation(self):
"""演示基本浏览器操作"""
try:
print("打开测试页面...")
self.driver.get("https://www.baidu.com")
print("执行搜索...")
search_box = self.wait.until(
EC.presence_of_element_located((By.ID, "kw"))
)
search_box.send_keys("自动化测试")
search_button = self.wait.until(
EC.element_to_be_clickable((By.ID, "su"))
)
search_button.click()
print("等待结果加载...")
self.wait.until(
EC.presence_of_element_located((By.CLASS_NAME, "result"))
)
print("截图保存...")
self.driver.save_screenshot("search_results.png")
time.sleep(2)
except Exception as e:
print(f"自动化测试出错: {e}")
finally:
self.driver.quit()
print("浏览器已关闭")
if name == "main":
print("=== 开始浏览器自动化演示 ===")
demo = BrowserAutomationDemo()
demo.demo_basic_navigation()
print("=== 演示结束 ===")
import requests
import time
import random
from threading import Thread
from queue import Queue
import json
class OrderSystemSimulator:
def init(self):
self.session = requests.Session()
self.headers = {
'User-Agent': 'Mozilla/5.0',
'Content-Type': 'application/json'
}
self.task_queue = Queue()
self.running = False
def login(self, username, password):
"""模拟登录流程"""
payload = {
'username': username,
'password': password
}
try:
response = self.session.post(
'https://api.demo.com/login',
data=json.dumps(payload),
headers=self.headers,
timeout=5
)
return response.json().get('token')
except Exception as e:
print(f"登录失败: {e}")
return None
def fetch_orders(self):
"""模拟获取订单列表"""
while self.running:
try:
time.sleep(random.uniform(0.5, 1.2))
response = self.session.get(
'https://api.demo.com/orders',
headers=self.headers,
timeout=3
)
orders = response.json()
for order in orders:
self.task_queue.put(order)
except Exception as e:
print(f"获取订单异常: {e}")
def process_order(self, order_id):
"""模拟处理订单"""
payload = {'order_id': order_id}
try:
time.sleep(random.uniform(0.3, 0.8))
response = self.session.post(
'https://api.demo.com/accept',
data=json.dumps(payload),
headers=self.headers,
timeout=2
)
print(f"订单处理结果: {response.text}")
except Exception as e:
print(f"处理订单失败: {e}")
def start_workers(self, worker_count=3):
"""启动工作线程"""
self.running = True
Thread(target=self.fetch_orders).start()
for i in range(worker_count):
Thread(target=self._worker_loop).start()
def _worker_loop(self):
"""工作线程主循环"""
while self.running:
if not self.task_queue.empty():
order = self.task_queue.get()
self.process_order(order['id'])
time.sleep(0.1)
if name == "main":
simulator = OrderSystemSimulator()
token = simulator.login("test_user", "password123")
if token:
simulator.headers['Authorization'] = f'Bearer {token}'
simulator.start_workers()
input("按回车键停止...")
simulator.running = False