• 图个乐子,瞎聊 at 2024年11月14日

    个人觉得挺不错的

    1. 正则表达式中,什么是贪婪匹配、什么是非贪婪匹配。
      • 贪婪匹配:在正则表达式中,默认情况下,量词(如*+?)会尽可能多地匹配字符,这称为贪婪匹配。
      • 非贪婪匹配:通过在量词后面加上?,可以使量词变为非贪婪匹配,即尽可能少地匹配字符。
    • 示例代码

      import re
      # 贪婪匹配
      greedy_match = re.findall(r'\d+', '123abc456def789')
      print(greedy_match)  # 输出 ['123456789']
      
      # 非贪婪匹配
      non_greedy_match = re.findall(r'\d+?', '123abc456def789')
      print(non_greedy_match)  # 输出 ['123', '456', '789']
      
    1. 正则表达式中,search() 和 match() 的区别。
      • search():在字符串中搜索正则表达式的第一次出现,并返回一个匹配对象。如果没有找到匹配,则返回None
      • match():仅从字符串的开始位置匹配正则表达式,如果开始位置没有匹配,则返回None
    • 示例代码

      import re
      # search() 示例
      search_result = re.search(r'foo', 'bar foo baz')
      print(search_result.group())  # 输出 'foo'
      
      # match() 示例
      match_result = re.match(r'foo', 'bar foo baz')
      print(match_result)  # 输出 None
      
    1. 介绍一下 udp 和 tcp 协议。

      • UDP(用户数据报协议):无连接的协议,提供快速但不可靠的数据传输,适用于对实时性要求高的应用,如视频会议和在线游戏。
      • TCP(传输控制协议):面向连接的协议,提供可靠的数据传输服务,确保数据按顺序、无误地到达目的地,适用于需要可靠传输的应用,如网页浏览和文件传输。
    2. get 和 post 的根本区别。(划重点:根本)

      • GET:用于请求数据,通常用于获取服务器上的资源,数据附在 URL 后面,对数据长度有限制,不安全(因为数据在 URL 中可见),且可被缓存。
      • POST:用于向服务器提交数据,数据包含在请求体中,对数据长度没有限制,相对安全(数据不在 URL 中),且不会被缓存。
    3. 介绍一下自动化实现的步骤。

      • 需求分析:明确自动化测试的目标和范围。
      • 测试计划:制定测试策略和计划。
      • 环境搭建:准备测试环境和所需的工具。
      • 脚本开发:编写自动化测试脚本。
      • 脚本执行:运行自动化脚本,执行测试。
      • 结果验证:检查测试结果是否符合预期。
      • 报告和维护:生成测试报告,并对脚本进行维护和更新。
    4. UI 自动化过程中用到哪些定位元素的方法。

      • ID 定位
      • Name 定位
      • Class Name 定位
      • Tag Name 定位
      • XPath 定位
      • CSS Selector 定位
      • Link Text 定位
      • Partial Link Text 定位
    5. UI 自动化中,用到哪些等待方式。

      • 显式等待(Explicit Wait):指定等待某个条件成立后再继续执行。
      • 隐式等待(Implicit Wait):设置一个超时时间,让 WebDriver 等待某个条件成立。
      • 睡眠等待(Sleep):让程序暂停执行一定时间。
    • 示例代码(使用 Selenium):

      from 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
      
      driver = webdriver.Chrome()
      driver.get("http://example.com")
      try:
          element = WebDriverWait(driver, 10).until(
              EC.presence_of_element_located((By.ID, "myDynamicElement"))
          )
      finally:
          driver.quit()
      
    1. 用 python 操作 excel。
    • 使用openpyxl库操作 Excel 示例代码:

      from openpyxl import Workbook
      
      # 创建一个新的Excel工作簿
      wb = Workbook()
      # 选择默认的工作表
      ws = wb.active
      # 给工作表命名
      ws.title = "Sample Sheet"
      
      # 写入数据
      ws.append(["ID", "Name", "Score"])
      ws.append([1, "John", 85])
      ws.append([2, "Doe", 90])
      
      # 保存工作簿到文件
      wb.save("sample.xlsx")
      
    1. session cookie、token、的区别。

      • Session Cookie:服务器生成的唯一识别码,存储在用户的浏览器中,用于识别用户状态。
      • Token:一种令牌,通常在用户登录后由服务器生成,用于验证用户身份,可以存储在客户端或服务端。
    2. 介绍一下自己的优势。

      • 这部分是个人自我介绍,可以根据您的个人特点和优势来回答。
    3. 判断 ipV4 的合法性。(代码实操)

    - 示例代码

    def is_valid_ipv4(ip):
        # 将输入的IP地址字符串按照点`.`分割成四部分
        parts = ip.split(".")
        # 检查分割后的结果是否正好有四部分,因为IPv4地址必须有四组数字
        if len(parts) != 4:
            return False
        # 遍历这四部分
        for part in parts:
            # 检查每部分是否都是数字
            if not part.isdigit():
                return False
            # 将每部分转换为整数,并检查是否在0到255的范围内
            if not 0 <= int(part) <= 255:
                return False
        # 如果所有检查都通过,说明IP地址是有效的
        return True
    

    接下来是两个测试用例:

    1. print(is_valid_ipv4("192.168.1.1")):这个测试用例检查字符串"192.168.1.1"是否是一个有效的 IPv4 地址。每组数字都在 0 到 255 之间,所以这个函数应该返回True

    2. print(is_valid_ipv4("256.100.50.25")):这个测试用例检查字符串"256.100.50.25"是否是一个有效的 IPv4 地址。第一组数字256超出了 0 到 255 的范围,所以这个函数应该返回False

    这个函数通过简单的字符串操作和条件检查来验证 IPv4 地址的有效性,但它不会处理一些边缘情况,比如前导零(例如"01.0.0.0")或者空字符串(例如".1.2.3")。对于更健壮的 IPv4 地址验证,可能需要更复杂的正则表达式或其他方法。

  • 你用这个浏览器插件试试看,edge 就有

  • 你只要不主动走就行,他开了你,就要给赔偿。你做好你份内的事情,其他不要瞎操心。

  • 啃爹的滴滴 - 出租车司机 at 2024年11月04日

    笑死我了,哈哈哈

  • 测试软考中级有必要考吗 at 2024年10月28日

    个人觉得有必要,我一直想考信息系统项目管理师,一直都没动起来,惰性。

  • 可以考虑去传统制造业试试机会

  • 图全挂了

  • 测试最终的归宿是什么? at 2024年08月21日

    就去参加所在街道或者当地政府授权的培训机构开设的课程,然后考试通过以后拿到技能等级证书。

  • 测试最终的归宿是什么? at 2024年08月21日

    拓展一下学习边界,我的意思是说,在做好软件测试的本职工作的前提和基础之上,去主动学习跨行业的技能知识,比如我先后去考了电子商务师,互联网营销师,家庭收纳师等技能等级证书,最起码以后能有个后路,不至于一直在互联网圈子里内卷。

  • 希望好运常在

  • API 可以实现,可以搜一下

  • 公司被 Fiddler 发告知函了 at 2024年07月18日

    fiddler 不是免费开源的么

  • MQTT 协议是个啥? at 2024年07月18日

    最后那个状态的图写错了,应该是 false

    在 MQTT 协议中,客户端(client)可以同时既是发布者(publisher)又是订阅者(subscriber)。这意味着客户端可以发送消息到一个主题(topic),同时也可以订阅同一个主题,从而接收到自己发布的消息。这种模式在某些应用场景中是有用的,比如当客户端需要在发送消息后立即处理这些消息时。

    关于session present的问题,这通常与 MQTT 的会话管理有关。以下是一些关键点:

    1. 会话(Session):在 MQTT 中,会话是客户端与服务器之间的一个连接状态。会话可以保持消息的顺序和状态,比如消息的 QoS(服务质量)和是否已确认。

    2. Session Present:当客户端重新连接到服务器时,服务器会检查是否有该客户端的会话信息。如果存在会话信息,则session presenttrue,表示会话是持久的,客户端可以继续接收之前订阅的主题的消息。如果不存在会话信息,则session presentfalse,表示会话是临时的,客户端需要重新订阅主题。

    3. Client ID:每个 MQTT 客户端都需要一个唯一标识符(Client ID)。服务器使用这个标识符来管理客户端的会话状态。

    4. Clean Session:如果客户端在连接时设置了Clean Session标志,那么服务器将不会保存任何会话信息。在这种情况下,每次客户端重新连接时,session present都会是false

    5. Persistent Session:如果客户端没有设置Clean Session标志,服务器会保存会话信息。这样,当客户端重新连接时,session present可能会是true,前提是服务器在客户端断开连接后没有清除会话信息。

    总结来说,session present的值取决于客户端的Clean Session设置和服务器的会话管理策略。如果服务器没有客户端的会话信息,session present一般会是false。但这也取决于具体的实现和配置。

  • 在中国,根据 2023 软科中国大学排名,一些大学的位置可以作为对比。例如,华中科技大学位列全国第八名,而西安交通大学位列全国第十名 。这两所大学在软科排名中的位置,与怀卡托大学在全球 QS 排名中的位置相近,可以认为怀卡托大学在中国大学中的级别可能与华中科技大学或西安交通大学相当。

  • 怀卡托大学(The University of Waikato)是新西兰的一所著名公立大学,成立于 1964 年,由新西兰政府资助。这所大学以其法律、管理、计算机、自然科学和教育等学科闻名,特别是其太平洋文化发展学院,是世界上最大的毛利和太平洋文化学术研究中心之一。怀卡托大学在 2025 年 QS 世界大学排名中位居全球第 235 位,并在新西兰大学中排名前三甲,特别是在研究方面蝉联新西兰第一名。

  • 微信群学个屁,别扯淡了,里面都是划水的,谁会用微信群学习技术。

  • 求助贴 Jmeter 报错 at 2024年05月29日

  • 在 Python 中,如果你在多进程环境中使用 logging 模块并尝试将日志写入同一个文件,可能会遇到竞争条件和其他并发问题,因为默认的 logging 配置并不是为并发写操作设计的。

    为了解决这个问题,你可以采取以下几种策略:
    为每个进程使用单独的日志文件:
    这是最简单的方法。你可以在创建每个进程时,给它们一个唯一的日志文件路径。
    使用队列和单个日志处理进程:
    你可以设置一个单独的进程来处理日志记录,其他所有进程都将日志消息发送到该进程的队列中。这个处理进程可以从队列中读取消息,并将它们写入日志文件。
    使用线程安全的日志处理:
    虽然 logging 模块本身不是线程安全的,但你可以使用线程安全的队列或其他同步机制来确保对日志文件的访问是顺序的。但是,在多进程环境中,这通常比使用单独的日志文件更复杂且效率更低。
    使用日志轮转和延迟打开:
    如果日志文件不是实时需要的,你可以考虑使用日志轮转,并在每个进程结束时才将日志写入文件。这可以通过延迟打开文件句柄直到需要写入日志来实现。
    使用第三方库:
    有些第三方库,如 loguru,提供了更高级的多进程日志记录功能。

    下面是一个简单的示例,展示如何为每个进程使用单独的日志文件:

    import logging  
    import multiprocessing  
    
    def worker_with_logging(process_id, log_file):  
        # 配置每个进程的日志记录器  
        logging.basicConfig(filename=log_file, level=logging.INFO,  
                            format='%(asctime)s process %d: %(message)s' % process_id)  
    
        # 记录一些日志  
        logging.info('Starting work')  
        # ... 执行一些工作 ...  
        logging.info('Finishing work')  
    
    if __name__ == '__main__':  
        processes = []  
        for i in range(5):  # 假设我们创建5个进程  
            log_file = f'log_{i}.txt'  
            p = multiprocessing.Process(target=worker_with_logging, args=(i, log_file))  
            p.start()  
            processes.append(p)  
    
        # 等待所有进程完成  
        for p in processes:  
            p.join()
    

    在这个示例中,每个进程都有自己的日志文件,因此不存在并发写入同一个文件的问题。

  • 在 Python 中,由于logging模块在多进程环境中存在一些限制,直接在多进程中使用logging模块写入同一个文件可能会导致日志错乱或死锁问题。为了解决这个问题,可以采用以下几种策略:

    1. 使用QueueHandlerQueueListener:创建一个日志队列,让主进程负责收集日志并写入文件。这种方式可以避免多进程直接写入文件,从而解决日志错乱和死锁的问题。

    2. 使用进程安全的日志库:例如concurrent-log-handler模块,它提供了线程和进程安全的日志处理方式。通过继承BaseRotatingHandler并实现文件锁机制,可以确保日志写入的准确性,尽管这可能会牺牲一些效率。

    3. 避免在多进程中使用文件锁:在多进程环境中,文件锁可能会导致死锁。可以通过设计日志系统来避免使用文件锁,例如,让一个单独的进程或线程负责日志的收集和写入。

    4. 使用独立的日志文件:为每个进程分配一个独立的日志文件,这样可以避免多进程写入同一个文件时的冲突。

    5. 使用网络日志:通过SocketHandler,可以让不同的进程通过网络发送日志消息到一个中心日志服务器,由服务器来处理日志存储。

    6. 使用第三方日志管理工具:例如使用SentryLogstash等工具,它们可以更好地处理多进程和多线程环境下的日志收集和存储。

    7. multiprocessingtarget函数之外定义 logger:确保在创建进程之前已经配置好 logger,这样可以减少多进程中由于 logger 初始化导致的潜在问题。

    8. 使用multiprocessing-logging:这是一个专门为多进程日志设计的库,可以简化多进程日志的处理。

    综上所述,要解决logging模块在多进程测试时写入文件报错的问题,需要根据具体的应用场景选择合适的日志处理策略。在设计日志系统时,应该考虑到多进程环境下的特殊性,采用合适的方法来确保日志的正确性和完整性。

  • 小程序可以用 airtest,也可以用 minium 框架
    https://airtest.doc.io.netease.com/
    https://minitest.weixin.qq.com/#/

  • 苏州跌惨了,自己的房子都跌了百十万以上

  • 支持

  • 祝贺

  • 社区可以搞搞自己的定制类的文创产品啥的出来卖卖,既丰富了积分兑换的产品,也可以满足会员的个人文化需求, 并且可以增加社区的营收