Enabling Cost-Effective UI Automation Testing with Retrieval-Based LLMs: A Case Study in WeChat
<|reference_start|>Enabling Cost-Effective UI Automation Testing with Retrieval-Based LLMs: A Case Study in WeChat: UI automation tests play a crucial role in ensuring the quality of mobile applications. Despite the growing popularity of machine learning techniques to generate these tests, they still face several challenges, such as the mismatch of UI elements. The recent advances in Large Language Models (LLMs) have addressed these issues by leveraging their semantic understanding capabilities. However, a significant gap remains in applying these models to industrial-level app testing, particularly in terms of cost optimization and knowledge limitation. To address this, we introduce CAT to create cost-effective UI automation tests for industry apps by combining machine learning and LLMs with best practices. Given the task description, CAT employs Retrieval Augmented Generation (RAG) to source examples of industrial app usage as the few-shot learning context, assisting LLMs in generating the specific sequence of actions. CAT then employs machine learning techniques, with LLMs serving as a complementary optimizer, to map the target element on the UI screen. Our evaluations on the WeChat testing dataset demonstrate the CAT's performance and cost-effectiveness, achieving 90% UI automation with $0.34 cost, outperforming the state-of-the-art. We have also integrated our approach into the real-world WeChat testing platform, demonstrating its usefulness in detecting 141 bugs and enhancing the developers' testing process.<|reference_end|>
@article{feng2024enabling,
    title={Enabling Cost-Effective UI Automation Testing with Retrieval-Based LLMs:
  A Case Study in WeChat},
    author={Sidong Feng, Haochuan Lu, Jianqin Jiang, Ting Xiong, Likun Huang,
  Yinglin Liang, Xiaoqin Li, Yuetang Deng, Aldeida Aleti},
    journal={arXiv preprint arXiv:2409.07829},
    year={2024},
    archivePrefix={arXiv},
    eprint={2409.07829},
    primaryClass={cs.SE}
}