测试&网络编程

一、unittest

功能:


def one_equation(a,b):
   """
       :param a:
       :param b:
       :return:
       ax + b = 0 的解
       x = -(b/a)
   """
   if a == 0:
       raise ValueError("被除数不能为零")
   else:
       return -(b/a)

def two_equation(a,b,c):
   """
   求解一元二次方程a*x*x + b*x + c=0的解
   :param a: 方程中二元变量的系数
   :param b: 方程中一元变量的系数
   :param c: 方程中的常量
   :return:  返回方程的根
   """
   # (-b + (b**2 - 4ac)**1/2)/2a
   # (-b - (b ** 2 - 4ac) ** 1/2)/2a
   if a == 0:
       raise ValueError("参数错误a!=0")
   elif b*b - 4*a*c < 0:
       raise ValueError("方程无解")
   elif b*b - 4*a*c == 0:
       return -b/(2*a)
   else:
       r1 = (-b + (b*b - 4*a*c)**(1/2))/(2*a)
       r2 = (-b - (b*b - 4*a*c)**(1/2))/(2*a)
       return r1,r2

测试:

"""
.: 测试全通过      .:pass
F: 测试失败        F:fail
E:测试出错        E:error
s: 跳过 该测试     s:skip 
"""
class TestFkMath(unittest.TestCase):
   def test_one_equation(self):
       self.assertEqual(one_equation(5,9),-1.8)
       self.assertTrue(one_equation(4,10) == -2.5,.00001)
       self.assertTrue(one_equation(4,-27) == 27/4)
       # 错的测试用例
       self.assertTrue(one_equation(1, -27) == 27/1)
   # 求解一元二次方程
   def test_two_equation(self):
       r1,r2 = two_equation(1,-3,2)
       self.assertCountEqual((r1,r2),(1.0,2.0),"求解出错")
       r1, r2 = two_equation(2,-7,6)
       self.assertCountEqual((r1, r2), (1.5, 2.0), "求解出错")
       with self.assertRaises(ValueError):
           two_equation(9,4,3)
       with self.assertRaises(ValueError):
           two_equation(4, 2, 3)

if __name__ == "__main__":
   unittest.main()

二、TCP/UDP网络编程

2.1 TCP

客户端:

"""
AF_INET: IPV4协议
AF_INET6: IPV6协议
SOCK_STREAM (TCP链接)
SOCK_DGRAM  (UDP链接)
"""
# tcp ipv4链接
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# bind ip
# 共有65535个端口
# 1000以内都是系统预留的
tcp_client.connect(("127.0.0.1",8005))
# 发送数据到服务器
while True:
   data = input("内容: ")
   tcp_client.send(data.encode("utf-8"))
   data = tcp_client.recv(1024)
   print(data.decode("utf-8"))

服务端:

"""
AF_INET: IPV4协议
AF_INET6: IPV6协议
SOCK_STREAM (TCP链接)
SOCK_DGRAM  (UDP链接)
"""
# tcp ipv4链接
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# bind ip
# 共有65535个端口
# 1000以内都是系统预留的
tcp_client.connect(("127.0.0.1",8005))
# 发送数据到服务器
while True:
   data = input("内容: ")
   tcp_client.send(data.encode("utf-8"))
   data = tcp_client.recv(1024)
   print(data.decode("utf-8"))

步骤:

​ step1: 先启动服务端

​ step2: 再启动客户端

​ 原则:保证端口一致

2.2 UDP

# 建立UDP
import socket
udp_cli = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
   data = input("请输入你要说的话")
   udp_cli.sendto(data.encode("utf-8"),("127.0.0.1",8858))
import socket
udp_serv = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_serv.bind(("127.0.0.1",8858))
while True:
   data,addr = udp_serv.recvfrom(1024)
   print("msg:",data.decode("utf-8"),"addr:",addr)

三、多线程

服务端:

# -*- coding:utf-8 -*-
"""
# @project : xcenv
# @Time : 2019/12/21 21:57
# @FileName : multiThread.py
# @Author : 摩登老师
# @在线教育机构 : 扣丁学堂
# @个人学习公众号(bilibili) : 猫在大神旁的小C
"""

import socket  # 导入 socket 模块
from threading import Thread

ADDRESS = ('127.0.0.1', 8712)  # 绑定地址
g_socket_server = None  # 负责监听的socket
g_conn_pool = []  # 连接池



def init():
   """
   初始化服务端
   """
   global g_socket_server
   g_socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建 socket 对象
   g_socket_server.bind(ADDRESS)
   g_socket_server.listen(5)  # 最大等待数
   print("服务端已启动,等待客户端连接...")


def accept_client():
   """
   接收新连接
   """
   while True:
       client, _ = g_socket_server.accept()  # 阻塞 , 等待客户端连接
       # 加入连接池
       g_conn_pool.append(client)
       # 给每个客户端创建一个独立的线程进行管理
       thread = Thread(target=message_handle, args=(client,))
       # 设置成守护线程
       thread.setDaemon(True)
       thread.start()


def message_handle(client):
   """
   消息处理
   """
   client.sendall("连接服务器成功!".encode(encoding='utf8'))
   while True:
       bytes = client.recv(1024)
       print("客户端消息:", bytes.decode(encoding='utf8'))
       if len(bytes) == 0:
           client.close()
           # 删除连接
           g_conn_pool.remove(client)
           print("有一个客户端下线了。")
           break

if __name__ == '__main__':
   init()
   # 新开一个线程,用于接收新连接
   thread = Thread(target=accept_client)
   thread.setDaemon(True)
   thread.start()
   # 主线程逻辑
   while True:
       cmd = input("""--------------------------
输入1:查看当前在线人数
输入2:给指定客户端发送消息
输入3:关闭服务端
""")
       if cmd == '1':
           print("--------------------------")
           print("当前在线人数:", len(g_conn_pool))
       elif cmd == '2':
           print("--------------------------")
           index, msg = input("请输入“索引,消息”的形式:").split(",")
           g_conn_pool[int(index)].sendall(msg.encode(encoding='utf8'))
       elif cmd == '3':
           exit()

客户端:

import socket  # 导入 socket 模块

s = socket.socket()  # 创建 socket 对象
s.connect(('127.0.0.1', 8712))
print(s.recv(1024).decode(encoding='utf8'))
s.send("连接了".encode('utf8'))
print(s.recv(1024).decode(encoding='utf8'))
input(" ")
相关推荐
&lt;p&gt; &lt;span style=&quot;font-size:18px;&quot;&gt;&lt;strong&gt;一、课程概要&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&lt;span style=&quot;font-size:16px;&quot;&gt;本课程主要分享白帽子脚本编程和运维自动化编程等干货技术!&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;二、课程含括&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;1、Python编程&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;2、Linux Shell编程&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;3、Windows CMD编程&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;4、Windows VBS编程&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;5、Windows PowerShell编程&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:18px;&quot;&gt;&lt;strong&gt;三、课程目标&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:18px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1、掌握白帽子脚本编程技术!&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; 2、掌握运维自动化编程技术!&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:18px;&quot;&gt;&lt;strong&gt;三、适合人员&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span style=&quot;font-size:16px;&quot;&gt;1、零基础大学生&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;2、IT技术人员&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;3、运维工程师&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;4、测试工程师&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:18px;&quot;&gt;&lt;strong&gt;四、特别提醒&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &nbsp; &nbsp;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp;1、本课程支持一次购买,永久观看,欢迎学员放心选购!&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;2、欢迎学员有问题在评论区反馈,讲师将第一时间答复!&lt;/span&gt; &lt;/p&gt;
&lt;p&gt; &lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;手工测试中遇到的坑 你踩过几个?&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;img src=&quot;https://img-bss.csdnimg.cn/202012171208356126.png&quot; alt=&quot;&quot; /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;解锁自动化测试技能 打破手工测试局限&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;自动化测试测试工作的一部分,是对手工测试的一种补充。自动化测试是相对手工测试而存在的,通过所开发&lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;的软件测试工具、脚本等来实现,具有良好的可操作性、可重复使用和高效率等特点。&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;img src=&quot;https://img-bss.csdnimg.cn/202012171212024924.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;&lt;strong&gt;Python自动化测试&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;系统教学+实战分析 简单易上手&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;课程使用的是语法简洁、提供丰富的测试库和框架的Python语言,并从测试人员的角度,梳理当前最热门的自动化测试框架和常用库,并通过实战,带你快速建立自动化测试技术体系,让测试工作更高效!&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;span style=&quot;font-size:14px;&quot;&gt;&lt;img src=&quot;https://img-bss.csdnimg.cn/202012171223546601.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;3个项目实战&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; &lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;全程手敲代码演示 听得懂 更要会用&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;img src=&quot;https://img-bss.csdnimg.cn/202012171224069333.png&quot; alt=&quot;&quot; /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;strong&gt;&lt;span style=&quot;font-size:16px;color:#003399;&quot;&gt;3大购课福利&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;img src=&quot;https://img-bss.csdnimg.cn/202012180149359103.png&quot; alt=&quot;&quot; /&gt; &lt;/p&gt;
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页